今天遇到一个问题就是SpringBoot在处理http的POST请求时,因为上送值在body里面,所以最好还是通过字节流读取,但是明明放在第一步操作,却总是不行,字节流总是显示被读取过。无奈在读取字节流函数打了断点,结果发现tomcat会先处理这个字节流导致的。
发现是SpringBoot内置过滤器HiddenHttpMethodFilter导致的,请求就是在HiddenHttpMethodFilter中internalDoFilter中读取了一次,看了一下,这个拦截器的主要功能是:html中form表单只支持GET与POST请求,而DELETE、PUT等method并不支持,spring3添加了一个过滤器,可以将这些请求转换为标准的http方法,使得支持GET、POST、PUT与DELETE请求。所以如果不需要的话,可以利用下面的方法去disable掉这个过滤器,然后可以看到在启动的时候,搜“HiddenHttpMethodFilter”有对应的取消配置的信息
@Configuration
public class FilterRegistrationConfiguration{
@Bean
public FilterRegistrationBean registration(HiddenHttpMethodFilter filter) {
FilterRegistrationBean registration = new FilterRegistrationBean(filter);
registration.setEnabled(false);
return registration;
}
}