SpringMVC3 和 json 的问题

在springmvc3里面,使用@ResponseBody和jackson下的jar包,可以直接将各种对象转换成json对象,这其中具体是怎么实现的。
求指导。

2个回答

这个过程最好自己debug跟踪一下
具体执行路线

AnnotationMethodHandlerAdapter->handle()->invokeHandlerMethod()->

[code="java"]
else if (AnnotationUtils.findAnnotation(handlerMethod, ResponseBody.class) != null) {
handleResponseBody(returnValue, webRequest);
return null;
}
[/code]

[code="java"]
private void handleResponseBody(Object returnValue, ServletWebRequest webRequest)
throws Exception {
if (returnValue == null) {
return;
}
HttpInputMessage inputMessage = createHttpInputMessage(webRequest);
HttpOutputMessage outputMessage = createHttpOutputMessage(webRequest);
writeWithMessageConverters(returnValue, inputMessage, outputMessage);
}
[/code]

[code="java"]
List allSupportedMediaTypes = new ArrayList();
if (getMessageConverters() != null) {
for (MediaType acceptedMediaType : acceptedMediaTypes) {
for (HttpMessageConverter messageConverter : getMessageConverters()) {
if (messageConverter.canWrite(returnValueType, acceptedMediaType)) {
messageConverter.write(returnValue, acceptedMediaType, outputMessage);
if (logger.isDebugEnabled()) {
MediaType contentType = outputMessage.getHeaders().getContentType();
if (contentType == null) {
contentType = acceptedMediaType;
}
logger.debug("Written [" + returnValue + "] as \"" + contentType +
"\" using [" + messageConverter + "]");
}
this.responseArgumentUsed = true;
return;
}
}
}
for (HttpMessageConverter messageConverter : messageConverters) {
allSupportedMediaTypes.addAll(messageConverter.getSupportedMediaTypes());
}
}
[/code]

具体在MappingJacksonHttpMessageConverter中,首先用canWrite判断是否能用json来转换

return this.objectMapper.canSerialize(clazz) && canWrite(mediaType);

基本就是这样一个过程

[code="java"]Jackson 是一个 Java 用来处理 JSON 格式数据的类库
可以 对象-》json json-对象==

@ResponseBody是spring的注解啊
表示该方法的返回结果直接写入HTTP response body中

这个很明了啊
[/code]

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐