在使用spring框架时,默认情况下@RequestParam注解只到接受Get和Post请求参数 ,而对于Put来说默认是使用@ReqeustBody注解的,如果希望为Put也开启@RequestParam,需要添加过滤器实现。
用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。(Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)
RequestParam可以接受简单类型的属性,也可以接受对象类型。
实质是将Request.getParameter() 中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段。
处理HttpEntity传递过来的数据,一般用来处理非Content-Type: application/x-www-form-urlencoded编码格式的数据。
总结
默认情况下会有错误
{"timestamp":1579144530724,"status":400,"error":"Bad Request","message":"Required String parameter 'name' is not present"}
添加PutFilter
@Component @WebFilter(urlPatterns = "/*") public class PutFilter extends HttpPutFormContentFilter { }
从新启动项目,PutFilter bean就被加载了
2020-01-16 11:13:37,358 - Mapping filter: 'tracingFilter' to: [/*] 2020-01-16 11:13:37,358 - Mapping filter: 'exceptionLoggingFilter' to: [/*] 2020-01-16 11:13:37,358 - Mapping filter: 'httpTraceFilter' to: [/*] 2020-01-16 11:13:37,358 - Mapping filter: 'webStatFilter' to urls: [/*] 2020-01-16 11:13:37,358 - Mapping filter: 'putFilter' to: [/*] 2020-01-16 11:13:37,358 - Mapping filter: 'corsFilter' to: [/*]
这时,你的Put请求就支持application/x-www-form-urlencoded提交了,就是来在后台可以用@RequestParam注解来接收了!