SpringMVC关于json、xml自动转换的原理研究

前言

SpringMVC是目前主流的Web MVC框架之一。

如果有同学对它不熟悉,那么请参考它的入门blog:http://www.cnblogs.com/fangjian0423/p/springMVC-introduction.html

现象

本文使用的demo基于maven,是根据入门blog的例子继续写下去的。

我们先来看一看对应的现象。 我们这里的配置文件 *-dispatcher.xml中的关键配置如下(其他常规的配置文件不在讲解,可参考本文一开始提到的入门blog):

(视图配置省略)

<mvc:resources location="/static/" mapping="/static/**"/>
<mvc:annotation-driven/>
<context:component-scan base-package="org.format.demo.controller"/>

pom中需要有以下依赖(Spring依赖及其他依赖不显示):

<dependency>
  <groupId>org.codehaus.jackson</groupId>
  <artifactId>jackson-core-asl</artifactId>
  <version>1.9.13</version>
</dependency>
<dependency>
  <groupId>org.codehaus.jackson</groupId>
  <artifactId>jackson-mapper-asl</artifactId>
  <version>1.9.13</version>
</dependency>

这个依赖是json序列化的依赖。

ok。我们在Controller中添加一个method:

@RequestMapping("/xmlOrJson")
@ResponseBody
public Map<String, Object> xmlOrJson() {
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("list", employeeService.list());
    return map;
}

直接访问地址:

我们看到,短短几行配置。使用@ResponseBody注解之后,Controller返回的对象 自动被转换成对应的json数据,在这里不得不感叹SpringMVC的强大。

我们好像也没看到具体的配置,唯一看到的就是*-dispatcher.xml中的一句配置:<mvc:annotation-driven/>。其实就是这个配置,导致了java对象自动转换成json对象的现象。

那么spring到底是如何实现java对象到json对象的自动转换的呢? 为什么转换成了json数据,如果想转换成xml数据,那该怎么办?

源码分析

本文使用的spring版本是4.0.2。  

在讲解<mvc:annotation-driven/>这个配置之前,我们先了解下Spring的消息转换机制。@ResponseBody这个注解就是使用消息转换机制,最终通过json的转换器转换成json数据的。

HttpMessageConverter接口就是Spring提供的http消息转换接口。有关这方面的知识大家可以参考"参考资料"中的第二条链接,里面讲的很清楚。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索json
, 数据
, 对象
, jackson
, responsebody
, springmvc+mysql
, springmvc 高并发
, 配置
, spring json
, java springmvc
, java json 数据转换
, 自动
, springmvc4...
springmvc注解
springmvc json xml、springmvc4 json xml、spring mvc 返回json、spring mvc json、spring mvc 接收json,以便于您获取更多的相关知识。

时间: 2024-08-03 13:59:20

SpringMVC关于json、xml自动转换的原理研究的相关文章

[WCF REST] 帮助页面与自动消息格式(JSON/XML)选择

可以说WebHttpBinding和WebHttpBehavior是整个Web HTTP编程模型最为核心的两个类型,前者主要解决消息编码问题,而余下的工作基本上落在了终结点行为WebHttpBehavior上.WebHttpBehavior属性HelpEnabled和AutomaticFormatSelectionEnabled是"帮助页面"与"自动消息格式选择"这两个特性的总开关.["自动消息格式(JSON/XML)选择"源代码从这里下载] 1

请教一个spring mvc自动转换json文件的问题

问题描述 自己学习easy ui+spring3 web mvc+spring3 mvc+mybatis,做了一些尝试,现在有一个功能实现出了点问题,特来请教大家:首先,功能说明:其实很简单,就是要根据后台返回的json数据在页面创建一个combotree,这个对象需要的是一个树状的json格式.我的做法:整个spring环境配置都没问题,这儿就不说了,关于spring mvc的配置,加入了如下内容,支持自动的json转换:<bean id="mappingJacksonHttpMessa

C#读取XML时会将原来的转义符自动转换问题(急)

问题描述 C#读取XML时会将原来的转义符自动转换,例如:&lt自动转换成<是什么原因,有没有什么属性或方法可以设置不做转义操作的?读取出来后再保存回文件时,文件中的转义符已经是转义后的了找了一天了,没找到方法.急,那位高手知道的? 解决方案 解决方案二:帮顶有分没有啊.解决方案三:要的是真正能解决我问题的方法,有没有?解决了自然给分解决方案四:在内容中用<![CDATA[...]]>括起来,这样就不会转义了.解决方案五:我在哪里加"<![CDATA[...]]&

将XML结点转换成JAVABEAN并存入数据库

xml|数据|数据库|转换 1.概述 我们要将外部系统给的XML文件进行解析,并存入到数据库. 但是我们并没有DTD或者Schema,只有一个WORD格式的说明文档:更离谱的是,XML结点树的结构(即XML结点与XML结点之间的关系)与业务Bean树的结构(即业务Bean与业务Bean的关系)并不完全一致,比如说,从业务角度讲,一只猪有只猪头,而在XML里,却写成了 pig --content --pighead 的三级关系,无端端多了一个content结点! 没有DTD/Schema,结构又不

【SpringMVC整合MyBatis】springmvc实现json交互-requestBody和responseBody

json数据交互 1.为什么要进行json数据交互 json数据格式在接口调用中.html页面中较常用,json格式比较简单,解析还比较方便. 比如:webservice接口,传输json数据. 2.springmvc进行json交互 (1)请求json.输出json,要求请求的是json串,所以在前端页面中需要将请求的内容转成json,不太方便. (2)请求key/value.输出json.此方法比较常用. 3.环境准备 3.1加载json转的jar包 springmvc中使用jackson的

如何使用json-lib实现Java和JSON之间的转换

1. json-lib是一个java类库,提供将Java对象,包括beans, maps, collections, java arrays and XML等转换成JSON,或者反向转换的功能. 2. json-lib 主页 : http://json-lib.sourceforge.net/ 3.执行环境 需要以下类库支持 jakarta commons-lang 2.5 jakarta commons-beanutils 1.8.0 jakarta commons-collections 3

C#中如何解决JSON / XML互转的问题

最近在一个POC的项目中要用到JSON和XML的相互转换, 虽然我知道很多类库如JSON.NET具备这种功 能, 但是我还是另辟蹊径的使用Spider Studio结合一个在线工具网站快速实现了这个功能. 在线工具网站: http://www.utilities-online.info/xmltojson 必备工具: Spider Studio (采集工作站): http://www.gdtsearch.com/products.spiderstudio.htm 1. 打开Spider Stud

SpringMVC返回json是设置编辑等消息头,消息头信息介绍(respone.setHeader,这个从网上获取)

1.  SpringMVC中设置消息头,例子如下: @RequestMapping(value="/hasOperatePrivilege") @ResponseBody public Map<String, Object> hasOperatePrivilege(HttpServletRequest request,          HttpServletResponse response,String websiteId) {    Map<String,Obj

springmvc 返回json格式给客户端的问题

问题描述 最近学习了springmvc 使用@responseBody注解以son格式返回消息,但是通过http解析器解析,response 返回的是text/html类型在网上找了好久也没有找到解决的办法js代码:function login() {$.ajax({type : "post",contentType : "application/json;charset=UTF-8",url : "/springmvc1/user/login"