我在拦截器中读取请求正文时遇到问题。双方getReader()并getInputStream()造成问题。我的拦截器:
public class MyInterceptor extends HandlerInterceptorAdapter {
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String requestBody = httpRequest.getReader().lines().collect(Collectors.joining(System.lineSeparator()));
//or
// String requestBody = new BufferedReader(new InputStreamReader(httpRequest.getInputStream()))
// .lines().collect(Collectors.joining("\n"));
//some logic...
return true;
}
两种方法都失败了,因为 spring 可能在内部某处使用了这样的资源。第一个原因java.lang.IllegalStateException: getReader() 已经被这个请求调用,并且缺少其他必需的请求体:org.springframework.http.ResponseEntity ...
我已经尝试了一些没有效果的包装器解决方法。我认为这是因为我不能像过滤器那样传递包装器(我不想使用过滤器,因为我有常见的异常管理器(@ControllerAdvice)。
这是一个已知的问题?有什么解决方法吗?
慕哥6287543
相关分类