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_")
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!