SpringBoot报错:java.lang.IllegalStateException: getReader() has already been called for this request

淡淡的烟草味﹌ 2024-04-01 14:58 185阅读 0赞

在这里插入图片描述
报错情况如图所示,有多种情况可能导致这个问题,首先就是由于request中的输入流是同一个。因此你如果已经使用了inputstream,那么你就不能再使用getReader去获取流。
下面是getReader()和getInputStream()的Servlet API文档说的:

  1. public java.io.BufferedReader getReader()
  2. ...
  3. ...
  4. Throws:
  5. java.lang.IllegalStateException - if getInputStream() method has been called on this request
  6. public ServletInputStream getInputStream()
  7. ...
  8. ...
  9. Throws:
  10. java.lang.IllegalStateException - if the getReader() method has already been called for this request

解决方法1:
先将原本的请求进行类型转换为HttpServletRequest,然后在使用ContentCachingRequestWrapper进行请求转换类型。
我使用的就是这种方式,比较简单好用。

  1. import org.springframework.web.util.ContentCachingRequestWrapper;
  2. @Override
  3. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
  4. HttpServletRequest request1 = (HttpServletRequest) servletRequest;
  5. ContentCachingRequestWrapper request = new ContentCachingRequestWrapper(request1);
  6. }

解决方式2:
解决方式2

发表评论

表情:
评论列表 (有 0 条评论,185人围观)

还没有评论,来说两句吧...

相关阅读