通过流一次打印所有参数。
String s = StreamUtils.copyToString(request.getInputStream(), Charset.defaultCharset());
System.out.println(s);
如果在拦截器读取了request.getInputStream(), 然后到了我们的 (处理器/控制器/Controller), 再次调用request.getInputStream()的时候获取的流是空的,HttpServletRequest 流数据不可重复读的原因导致的。
解决方案
使用ContentCachingRequestWrapper,通过ContentCachingRequestWrapper#getContentAsByteArray()来读取数据,来实现可重复读的目的。
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest requestWrapper = new ContentCachingRequestWrapper((HttpServletRequest) request);
String s = StreamUtils.copyToString(requestWrapper.getInputStream(), Charset.defaultCharset());
System.out.println(s)