Heim  >  Artikel  >  Java  >  So lösen Sie das Problem, dass die PUT-Anfrage von SpringBoot2 keine Parameter empfangen kann

So lösen Sie das Problem, dass die PUT-Anfrage von SpringBoot2 keine Parameter empfangen kann

WBOY
WBOYnach vorne
2023-05-20 20:38:431572Durchsuche

HiddenHttpMethodFilter

So lösen Sie das Problem, dass die PUT-Anfrage von SpringBoot2 keine Parameter empfangen kann

Das Formularformular in HTML unterstützt nur GET- und POST-Anfragen, aber Methoden wie DELETE und PUT werden nicht unterstützt, um diese Anfragen in Standard-HTTP-Methoden umzuwandeln, was die Unterstützung ermöglicht GET-, POST-, PUT- und DELETE-Anfragen.

    @Bean
    public FilterRegistrationBean<HiddenHttpMethodFilter> testFilterRegistration3() {
        FilterRegistrationBean<HiddenHttpMethodFilter> registration = new FilterRegistrationBean<HiddenHttpMethodFilter>();
        registration.setFilter(new HiddenHttpMethodFilter());//添加过滤器
        registration.addUrlPatterns("/*");//设置过滤路径,/*所有路径
        registration.setName("HiddenHttpMethodFilter");//设置优先级
        registration.setOrder(2);//设置优先级
        return registration;
    }

Setzen Sie die Methode im Formular der Seite auf „Post“ und fügen Sie wie folgt ein verstecktes Feld hinzu:

<input type="hidden" name="_method" value="put" />

Sehen Sie sich den HiddenHttpMethodFilter-Quellcode an

        String paramValue = request.getParameter(methodParam);  
        if("POST".equals(request.getMethod()) && StringUtils.hasLength(paramValue)) {  
            String method = paramValue.toUpperCase(Locale.ENGLISH);  
            HttpServletRequest wrapper = new HttpMethodRequestWrapper(request, method); 
            filterChain.doFilter(wrapper, response);  
        } else  
        {  
            filterChain.doFilter(request, response);  
        }  
}

Wie aus dem Quellcode ersichtlich ist, filtert der Filter nur den Beitrag Methode und muss Parameternamen hinzufügen Als verstecktes Feld von _method können Sie auch andere Parameternamen festlegen. Wenn Sie es beispielsweise auf _method_ festlegen möchten, können Sie die Initialisierungsparameter in der HiddenHttpMethodFilter-Konfigurationsklasse festlegen: put (methodParam , „_method_“)

HttpPutFormContentFilter

So lösen Sie das Problem, dass die PUT-Anfrage von SpringBoot2 keine Parameter empfangen kann

Es ist aus HiddenHttpMethodFilter bekannt, dass der Methodenwert des Formulars in HTML nur post oder get sein kann. Wir können die Parameter-Schlüssel-Wert-Paare im Put-Formular über HiddenHttpMethodFilter abrufen. Es gibt eine andere Möglichkeit, die Parameter-Schlüssel-Wert-Paare des Put-Formulars in Spring3 abzurufen, nämlich die Verwendung des HttpPutFormContentFilter-Filters.

    @Bean
    public FilterRegistrationBean<HttpPutFormContentFilter> testFilterRegistration2() {
        FilterRegistrationBean<HttpPutFormContentFilter> registration = new FilterRegistrationBean<HttpPutFormContentFilter>();
        registration.setFilter(new HttpPutFormContentFilter());//添加过滤器
        registration.addUrlPatterns("/*");//设置过滤路径,/*所有路径
        registration.setName("HttpPutFormContentFilter");//设置优先级
        registration.setOrder(2);//设置优先级
        return registration;
    }

Der Zweck des HttpPutFormContentFilter-Filters besteht darin, den Wert des Put-Formulars abzurufen und ihn an die Methode im Controller zu übergeben, die mit der Methode RequestMethod.put gekennzeichnet ist.

Im Gegensatz zu HiddenHttpMethodFilter muss im Formular kein verstecktes Feld mit dem Parameternamen _method hinzugefügt werden, und die Methode muss nicht gepostet werden. Sie wird direkt als Put geschrieben, aber dieser Filter kann nur den Enctype-Wert akzeptieren application/x-www-form-urlencoded Formular, das heißt, bei Verwendung dieses Filters muss der Code des Formularformulars wie folgt lauten:

<form action="" method="put" enctype="application/x-www-form-urlencoded">  
    ......  
</form>

Darüber hinaus sind nach dem Testen auch die JSON-Daten in Ordnung. enctype="application/json" ist auch ok

Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem, dass die PUT-Anfrage von SpringBoot2 keine Parameter empfangen kann. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen