java - SpringMVC关于json、xml自动转换的原理研究(2)

2019-09-01 18:57

RequestResponseBodyMethodProcessor的supportsReturnType方法:

然后使用handleReturnValue方法进行处理:

我们看到,这里使用了转换器。 具体的转换方法:

至于为何是请求头部的Accept数据,读者可以进去debug这个getAcceptableMediaTypes方法看看。 我就不罗嗦了~~~

ok。至此,我们走遍了所有的流程。

现在,回过头来看。为什么一开始的demo输出了json数据? 我们来分析吧。

由于我们只配置了,因此使用spring默认的那些转换器。

很明显,我们看到了2个要看能不能转换,得看HttpMessageConverter接口的public boolean canWrite(Class clazz, MediaType mediaType)方法是否返回true来决定的。

我们先分析SourceHttpMessageConverter:

它的canWrite方法被父类AbstractHttpMessageConverter重写了。

发现SUPPORTED_CLASSES中没有Map类(本文demo返回的是Map类),因此不支持。 下面看Jaxb2RootElementHttpMessageConverter: 这个类直接重写了canWrite方法。

需要有

最终MappingJackson2HttpMessageConverter匹配,进行json转换。(为何匹配,请读者自行查看源码)

实例讲解

我们分析了转换器的转换过程之后,下面就通过实例来验证我们的结论吧。 首先,我们先把

之前已经分析,默认的转换器中是支持

由于Map是jdk源码中的部分,因此我们用Employee来做demo。 因此,Controller加上一个方法:

@RequestMapping(\

实体中加上@

结果如下:

我们发现,解析成了 这里为什么解析成

之前分析过,消息转换器是根据class和mediaType决定的。 我们使用firebug看到:

我们发现Accept有

我们再来验证,同一地址,HTTP头部不同Accept。看是否正确。

$.ajax({ url: \{ console.log(res); }, headers: { \


java - SpringMVC关于json、xml自动转换的原理研究(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2017年下学期《机械基础》期中考试试题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: