SpringMVC——-Controller返回格式化数据如JSON、XML的配置方式和机制
1、本文内容
我们在Web项目开发过程中,一般来说访问一个处理器,然后会返回一个视图,或者跳转到另外的处理器。但是随着项目越来越复杂,需求越来越复杂,对于处理器返回数据的类型要求也越来越多。比如要求能够返回JSON类型的数据、或者能够返回XML格式的数据,或者返回二进制的数据流等等。
SpringMVC提供了这样的一个机制,允许控制器返回的数据不经过正常的视图处理流程,而是直接将返回的数据写入响应体中(response body)。
当然HTTP协议支持的各种数据类型与我们程序运行中产生的各种数据类型是不一样的,因此需要有一个机制将处理器返回的数据转换成某种类型的HTTP协议支持的数据类型。
下面介绍相关的机制。
2、设置处理器返回值直接写入响应体
SpringMVC框架提供了一种十分简单的方式来配置控制器中的某个处理器的返回值直接写入响应体,只需要在处理器方法上添加 @ResponseBody 注解即可
- @Controller
- public class HomeController {
- @RequestMapping("/json")
- @ResponseBody
- public Book jsonFun() {
- Book book = new Book("spring-framework", "12345", "2016-10-12");
- return book;
- }
- }
3、数据类型转换
SpringMVC提供了一种数据转换机制,这种机制可以根据预先设定的media type,调用合适的转换器将数据转换成合适的类型。
3.1、默认包含的转换器
SpringMVC默认包含一系列的数据转换器,此处不一一列举,就介绍几种常用的。
MappingJackson2XmlHttpMessageConverter 基于Jackson的XML转换器,能够将对象转换成XML格式的数据
MappingJackson2HttpMessageConverter 基于 Jackson 的JSON转换器,能够将对象转换成JSON格式的数据
GsonHttpMessageConverter 基于Gson的JSON转换器,能够将对象转换成JSON格式数据
对于系统中默认包含的转换器,只要我们在项目中加入转换器所依赖的JAR包,相关转换器就会被加载。
3.2、设置数据转换类型 media type
现在我们明确了如何允许控制器直接将返回结果写入响应体中,并且明确了处理器将返回的数据写入响应体之前会进行相应的转换。
但是根据我们前面一节的了解,我们发现SpringMVC中默认携带的转换器不止一种,那么我们如何确定处理器返回的数据交给合适的转换器,转换成我们想要的数据类型呢?
只需要使用 @ReuqestMapping注解的一个参数进行设置即可
- @RequestMapping(value="/json", produces={"application/json; charset=UTF-8"})
- @ResponseBody
- public Book abc() {
- Book book = new Book("spring-framework", "12345", "2016-10-12");
- return book;
- }
如上面这个例子,我们将原本使用@RequestMapping设置的路径设置为 value属性的值,此外另外设置一个属性 produces,这个属性接受一个字符串数组。接受的数据类型是 media type。上面这个例子就是标明这个方法的返回结果要转换成UTF-8编码的JSON数据。
3.3、系统默认的设置的 media type[4]
在一些简单的环境中,比如项目返回的数据类型只需要JSON格式,可能就不需要设置 produces的类型,来指定 media type,也能够按照要求返回正常的JSON数据,这是为什么?
因为SpringMVC在项目初始化时,会去扫描系统中的JAR包,然后根据扫描到的JAR包设置默认的转换类型,大概的扫描过程是:
1)检查系统中是否存在jackson-xml的JAR包,如果存在,就将数据转换类型列表中设置XML类型,以及其对应的转换器
2)检查系统中是否存在jackson-json的JAR包,如果存在,就在数据转换类型列表中设置JSON类型,以及其对应的转换器
因为是先检测的XML,因此XML排在JSON前面,如果系统两者的JAR包都存在,那么默认情况下数据会被转换成XML格式
4、设置JSON数据示例
4.1、导入相关JAR包
导入jackson的三个核心包
- jackson-annotations-2.8.5.jar
- jackson-core-2.8.5.jar
- jackson-databind-2.8.5.jar
4.2、编写控制器
编写控制器中的方法,注意以下两个方面:
1)这个方法需要使用 @ResponseBody注解标注
2)这个方法的返回类型就是需要被转换成JSON数据的类型
- @RequestMapping(value="/json", produces={"application/json; charset=UTF-8"})
- @ResponseBody
- public Book abc() {
- Book book = new Book("spring-framework", "12345", "2016-10-12");
- return book;
- }
当然,如果你的系统中只导入了JSON的包,那么默认就是JSON类型的,因此也可以写成这样
- @RequestMapping("/json")
- @ResponseBody
- public Book abc() {
- Book book = new Book("spring-framework", "12345", "2016-10-12");
- return book;
- }
4.3、运行测试
观察返回的内容,可以发现book对象被正确的转换成了一个JSON字符串
5、设置XML数据示例
5.1、引入相关JAR包
jackson中有包含转XML的包
- jackson-dataformat-xml-2.8.5.jar
不过它依赖于下列一系列的包
- jackson-annotations-2.8.5.jar
- jackson-core-2.8.5.jar
- jackson-databind-2.8.5.jar
- jackson-module-jaxb-annotations-2.8.5.jar
- stax2-api-3.1.4.jar
- woodstox-core-5.0.3.jar
5.2、编写控制器
- @RequestMapping(value="/xml", produces={"application/xml; charset=UTF-8"})
- @ResponseBody
- public Book abc() {
- Book book = new Book("spring-framework", "12345", "2016-10-12");
- return book;
- }
前面说过如果同时有XML和JSON的JAR包的话,默认XML的优先级会高一些,这里可以进行一下测试,看看如果不设置 produces,获取的数据是JSON还是XML。
5.3、测试结果
参考
SpringMVC——-Controller返回格式化数据如JSON、XML的配置方式和机制的更多相关文章
- SpringMVC常用配置-Controller返回格式化数据如JSON、XML的配置方式和机制
- SpringMVC Controller 返回值几种类型
SpringMVC Controller 返回值几种类型 2016年06月21日 19:31:14 为who而生 阅读数:4189 标签: Controller 返回值类型spring mvc 更多 ...
- spring,springmvc,mybatis基本整合(一)--xml文件配置方式(1)
**这个整合.仅仅是最主要的整合,而且是xml配置文件的方式之中的一个,即当中的mybatis是採用非mapper接口的方式.(第二遍採用mapper接口方式.第三遍採用注解的方式:第四篇採用注解基于 ...
- ajax 另外两种返回类型(json xml)
返回json类型(例子): <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...
- SpringMVC Ajax返回的请求json
的方式来解决在中国字符串乱码问题
1.org.springframework.http.converter.StringHttpMessageConverter类是类处理请求或相应的字符串.和默认字符集ISO-8859-1,所以当返回 ...
- ASP.Net MVC 在ajax接收controller返回值为Json数据
首先,再次回忆一下ajax的标准用法:(这张图写的比较详细了)(转) 页面部分ajax代码: $.ajax({ url: "/Home/Login?account=&q ...
- SpringMVC Controller 返回值的可选类型
spring mvc 支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void. ModelAndView @RequestMap ...
- 转SpringMVC Controller 返回值的可选类型
spring mvc 支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void. ModelAndView @RequestMap ...
- Spring的xml文件配置方式实现AOP
配置文件与注解方式的有很大不同,多了很多配置项. beans2.xml <?xml version="1.0" encoding="UTF-8"?> ...
随机推荐
- luogu P4006 小 Y 和二叉树
luogu loj 可以发现度数\(< 3\)的点可以作为先序遍历的第一个点,那么就把度数\(< 3\)的编号最小的点作为第一个点.然后现在要确定它的左右儿子(或者是右儿子和父亲).我们把 ...
- 删库?半个DBA的跑路经验总结
0. 国内呆不下了,赶紧出国 首先,不要选动车,要选最近的一班飞机,尽快出国,能走高速走高速,不然选人少的路线. 没错,我们 DBA 都是常备护照的. 切记,注意看高德地图实时路况. 我们有个前辈就是 ...
- SQL SERVER 中 sp_rename 用法
转自:http://www.cnblogs.com/no7dw/archive/2010/03/04/1678287.html 因需求变更要改表的列名,平常都是跑到Enterprise manager ...
- Zookeeper启动失败,报错 can not open chanel to 2
zookeeper 3.4.8 安装在 7 台不同的虚拟机上,配置文件如下: tickTime= initLimit= syncLimit= dataDir=/var/zookeeper client ...
- ssh无密码访问设置(ssh-keygen 的详解)
[原文链接]http://blog.csdn.net/wh_19910525/article/details/7433164 为了让两个linux机器之间使用ssh不需要用户名和密码.所以采用了数字签 ...
- python、第七篇:ORM框架SQLAlchemy
一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取 ...
- linux centos 7安装 apache php 及mariadb
1安装Apache, PHP, MySQL以及php库组件. yum -y install httpd php mysql php-mysql 2 安装apache扩展 yum -y install ...
- RAID原理详解
RAID 0(stripe,条带化存储):在RAID级别中最高的存储性能. 原理:是把连续的数据分散到多个磁盘上存取,系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于他自己的那部分数据请求. ...
- Katalon Studio入门学习之三种获取元素方式
Katalon Studio中元素属性定位有三种方式,分别是XPath.Attributes(元素).CSS(样式),KS的界面展示如右图 打开网站,按F12或进入浏览器设置->更多工具-> ...
- linux命令详解之ls命令
ls命令概述 ls命令用于显示文件目录列表,和Windows系统下DOS命令dir类似.当执行ls命令时,默认显示的只有非隐藏文件的文件名.以文件名进行排序及文件名代表的颜色显示.当不加参数时,默认列 ...