我写了拦截器:
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { log.info("[pre-handle] method: {}\tURL: {}", request.getMethod(), request.getRequestURL()); if (HttpMethod.POST.name().equals(request.getMethod())) { log.info(request.getReader().lines().collect(Collectors.joining())); } return true; }
但是当我尝试调用控制器时,抛出异常:
java.lang.IllegalStateException:之后无法调用getInputStream()已为当前请求调用getReader()
据我了解,getReader()调用关闭InputStream,而控制器没有任何响应。如何解决?
[我写了拦截器:@Override公共布尔preHandle(HttpServletRequest请求,HttpServletResponse响应,对象处理程序)引发异常{log.info(“ [pre-handle]方法:{} \ tURL:{}”,...
要多次读取请求,您将需要在第一次读取请求之前对其进行缓存。更多信息可以阅读here。
在您的情况下,潜在的问题是您需要读取输入流两次。您可以使用ServletRequestWrapper并以日志记录方法和实际控制器访问数据。对于(部分)示例