问题背景
最近在项目中集成 activiti 工作流的框架,在保存模型的时候有这样一个方法,请求方式为put, 请求为Rest风格,modelId 倒是能获取到,但是后面的4个参数一直不能接收到。
@RequestMapping(value = "/model/{modelId}/save", method = RequestMethod.PUT)
@ResponseStatus(value = HttpStatus.OK)
public void saveModel(@PathVariable String modelId
, String name, String description
, String json_xml, String svg_xml) {
******
}
结果分析发现,浏览器发送请求的时候,参数全部发送了出去,所以把问题定位到为什么接收为null,通过代码对比,最后把问题定位到PUT请求上,经过百度,果然是PUT接收不到参数,具体的问题详解可以看以下博客:
SpringBoot2的PUT请求接收不了参数
解决方法
添加以下过滤器:
@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;
}
疑问
在没有集成 Spring Secrity之前,是完全没有这个问题的,参数都能获取,不能到是那里导致了PUT不能使用?