У меня проблема с чтением тела запроса в перехватчике.И 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).
Это известная проблема? Есть ли обходной путь для этого?