ServletServerHttpRequest getinputstream获取不到字节数据

使用spring4.0的框架,重新定义messageconverter解析类,只加了一个自定义的jackson解析模型,直接copy MappingJackson2HttpMessageConverter类,在
private Object readJavaType(JavaType javaType, HttpInputMessage inputMessage) {
       try {
            if(inputMessage.getBody().available() == 0)
            {
                return null;
            }

            return this.objectMapper.readValue(inputMessage.getBody(), javaType);
        } catch (IOException var4) {

            throw new HttpMessageNotReadableException("Could not read JSON: " + var4.getMessage(), var4);
        }
    }
中重新定义一段代码,红色部分,我们看inputMessage.getBody()


发现到ServletServerHttpRequest的getbody
public InputStream getBody() throws IOException {
        return (InputStream)(this.isFormPost(this.servletRequest)?this.getBodyFromServletRequestParameters(this.servletRequest):this.servletRequest.getInputStream());
    }
看源码,只要application/x-www-form-urlencoded或者不是post,该方法就返回
this.servletRequest.getInputStream());

我在自定义类里发现inputMessage.getBody().available() == 0都是true;数据呢,
发现一个请求inputstream只能被读取一次,以后只能通过getParameterMap来获取了,我在filter里打印了inputstream,所以这里就获取不到字节流

所以重点是servlet的request的inputstream只能被读一次,馹

猜你喜欢

转载自wjg-java.iteye.com/blog/2338519