Я использую Spring boot, и я пытаюсь создать перехватчик, который будет регистрировать некоторую информацию о каждом запросе.Я прочитал, что мне нужно написать пользовательскую оболочку для класса HttpServlerRequest, чтобы получить доступ к телу запроса, потому что его вызов вызывается только один раз.Я создал класс wrap, но получаю исключение
java.lang.IllegalStateException: getReader() has already been called for this request
Я думаю, что getReader вызывается один раз в моей оболочке, поэтому я не знаю, как это исключение выдается.Можете ли вы помочь мне?
Класс обертки:
public class CustomWrapper extends HttpServletRequestWrapper {
private static final Logger logger = LogManager.getLogger(CustomWrapper.class);
@Getter
private String body;
public CustomWrapper(HttpServletRequest request) throws IOException {
super(request);
body = IOUtils.toString(request.getReader());
}
@Override
public ServletInputStream getInputStream() {
final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes());
return new ServletInputStream() {
@Override
public boolean isFinished() {
return byteArrayInputStream.available() == 0;
}
@Override
public boolean isReady() {
return true;
}
@Override
public void setReadListener(ReadListener readListener) {
}
@Override
public int read() {
return byteArrayInputStream.read();
}
};
}
@Override
public BufferedReader getReader() throws IOException {
logger.info("WRAPPER - getReader");
return new BufferedReader(new InputStreamReader(this.getInputStream(), Charset.forName("UTF-8")));
}
}
Класс перехватчика:
@Component
public class CustomRequestInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
CustomWrapper wrapper = new CustomWrapper(request);
return super.preHandle(request, response, handler);
}
}
Так что в основном я создаю только экземпляр класса обертки и исключение в брошенном такЯ предполагаю, что реализация оболочки плохая, но я не могу ее найти.