Maison  >  Article  >  Java  >  Comment résoudre le problème selon lequel la requête PUT de SpringBoot2 ne peut pas recevoir de paramètres

Comment résoudre le problème selon lequel la requête PUT de SpringBoot2 ne peut pas recevoir de paramètres

WBOY
WBOYavant
2023-05-20 20:38:431614parcourir

HiddenHttpMethodFilter

Comment résoudre le problème selon lequel la requête PUT de SpringBoot2 ne peut pas recevoir de paramètres

Le formulaire en HTML ne prend en charge que les requêtes GET et POST, mais les méthodes telles que DELETE et PUT ne sont pas prises en charge. Spring3 a ajouté un filtre qui peut convertir ces requêtes en méthodes http standard, permettant ainsi la prise en charge. Requêtes GET, POST, PUT et DELETE.

    @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;
    }

Définissez la méthode sur Post dans le formulaire de la page et ajoutez un champ masqué comme suit :

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

Affichez le code source de HiddenHttpMethodFilter

        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);  
        }  
}

Comme le montre le code source, le filtre filtre uniquement la publication méthode et doit ajouter des noms de paramètres. Comme champ caché de _method, vous pouvez également définir d'autres noms de paramètres. Par exemple, si vous souhaitez le définir sur _method_, vous pouvez définir les paramètres d'initialisation dans la classe de configuration HiddenHttpMethodFilter : put (methodParam). , "_method_")

HttpPutFormContentFilter

Comment résoudre le problème selon lequel la requête PUT de SpringBoot2 ne peut pas recevoir de paramètres

Il est connu de HiddenHttpMethodFilter , la valeur de la méthode du formulaire en HTML ne peut être que post ou get. Nous pouvons obtenir les paires clé-valeur de paramètre dans le formulaire put via HiddenHttpMethodFilter. est une autre façon d'obtenir les paires clé-valeur de paramètre du formulaire put dans Spring 3, qui consiste à utiliser le filtre HttpPutFormContentFilter.

    @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;
    }

La fonction du filtre HttpPutFormContentFilter est d'obtenir la valeur du formulaire put et de la transmettre à la méthode du Controller marquée avec la méthode RequestMethod.put.

Différent de HiddenHttpMethodFilter, il n'est pas nécessaire d'ajouter un champ caché avec le nom du paramètre _method dans le formulaire, et la méthode n'a pas besoin d'être post, elle est écrite directement telle que put, mais ce filtre ne peut accepter que la valeur enctype application/x-www-form-urlencoded form, c'est-à-dire que lors de l'utilisation de ce filtre, le code du formulaire form doit être le suivant :

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

De plus, après tests, les données json sont également ok, enctype="application/json" est également ok

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer