使用spring4.0的框架,重新定义messageconverter解析类,只加了一个自定义的jackson解析模型,直接copy MappingJackson2HttpMessageConverter类,在
private Object readJavaType(JavaType javaType, HttpInputMessage inputMessage) {
[color=red] try {
if(inputMessage.getBody().available() == 0)
{
return null;
}[/color]
return this.objectMapper.readValue(inputMessage.getBody(), javaType);
} catch (IOException var4) {
throw new HttpMessageNotReadableException("Could not read JSON: " + var4.getMessage(), var4);
}
}
中重新定义一段代码,红色部分,我们看inputMessage.getBody()
[img]http://dl2.iteye.com/upload/attachment/0121/3172/15829f25-eb23-3245-8552-65afd0a7d2b2.png[/img]
发现到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,所以这里就获取不到字节流
[color=darkred][size=medium]所以重点是servlet的request的inputstream只能被读一次,馹[/size][/color]
private Object readJavaType(JavaType javaType, HttpInputMessage inputMessage) {
[color=red] try {
if(inputMessage.getBody().available() == 0)
{
return null;
}[/color]
return this.objectMapper.readValue(inputMessage.getBody(), javaType);
} catch (IOException var4) {
throw new HttpMessageNotReadableException("Could not read JSON: " + var4.getMessage(), var4);
}
}
中重新定义一段代码,红色部分,我们看inputMessage.getBody()
[img]http://dl2.iteye.com/upload/attachment/0121/3172/15829f25-eb23-3245-8552-65afd0a7d2b2.png[/img]
发现到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,所以这里就获取不到字节流
[color=darkred][size=medium]所以重点是servlet的request的inputstream只能被读一次,馹[/size][/color]