目录
2.1、自定义HttpServletRequestWrapper
2.2、JsonRequestHeaderParamsHelper
2.3、HttpServletRequestReplacedFilter
1、背景
当前系统Content-Type为application/json,参数接收方式采用@RequestBody和@RequestParam,但Interceptor拦截器和Aspect切面中存在再次调用request获取其中请求参数或者请求头等操作,导致报错getReader()和getInputStream()只能调用一次(getInputStream() has already been called for this request)。
2、解决方案
2.1、自定义HttpServletRequestWrapper
由于请求信息存储在流中,只能调用一次,因此将其存储到字节数组中,保证之后调用getReader()和getInputStream()均通过body数组来获取数据。
public class BodyReaderHttpServletRequestWrapper extends
HttpServletRequestWrapper {
private final byte[] body;
public BodyReaderHttpServletRequestWrapper(HttpServletRequest request)
throws IOException {
super(request);
bo