HttpServletRequest inputStream只能读取一次的问题

ServletRequest#getInputStream()只能读取一次,一般在filter中从request的inputStream读取数据后,会在controller层抛出异常,例如“Required request body is missing”。

问题原因就是inputStream的数据只能读取一次,从inputStream中读取过数据之后,后续再从inputStream中就不能再读取到数据了。

一般可以使用ContentCachingRequestWrapper包装request,后续想要再获取数据可以通过requestWrapper#getContentAsByteArray方法获取数据。

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        ContentCachingRequestWrapper requestWrapper = new ContentCachingRequestWrapper((HttpServletRequest) request);
        
        byte[] bytes = requestWrapper.getContentAsByteArray();
        // ... 处理数据

        chain.doFilter(requestWrapper, response);
    }

你可能感兴趣的:(-------【Spring,Boot】)