一个非常简单的用例:
class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) {
String body = IOUtils.toString(req.getInputStream());
// body is a always empty
}
}
当我发送内容类型为application/json
的请求时,我会获得实际的有效负载。但是当我以x-www-form-urlencoded
发送它时,我不会得到任何数据。我假设其中一个弹簧过滤器已经消耗了数据,并且我的过滤器没有任何内容。
请注意,此问题与我们只能读取一次流的事实无关。我已经想到了这一部分,我正在为其他过滤器创建另一个带有缓冲输入流的HttpServletRequest
。问题是Spring Boot中的其他内容正在读取我的所有数据,而这些数据一言不发。
我只想找到一种方法来掌握有效载荷。它不一定来自InputStream
,如果春天可以给我一个byte[]
的有效载荷,它将符合我的目的。
我正在使用Spring Boot 1.3.5。
答案 0 :(得分:0)
我想这里的问题是 HiddenHttpMethodFilter ,它会消耗流。
请尝试通过添加以下代码来禁用过滤器,然后检查它是否有效
@Bean
public FilterRegistrationBean registration(HiddenHttpMethodFilter filter) {
FilterRegistrationBean registration = new FilterRegistrationBean(filter);
registration.setEnabled(false);
return registration;
}
答案 1 :(得分:0)
您可以通过application.properties禁用此功能
spring.mvc.hiddenmethod.filter.enabled=false