本人博客已移至: www.andyqian.com 此处不再更新.........
在本篇文章中,我们来学习spring MVC中返回的数据格式,这种方式在写接口时,非常适用也非常实用,
其实在spring mvc 中本身对数据的返回格式已经封装的非常好,同时支持多种格式, 使用到的是 内容协商者 也就是如下类: (详细配置如下)
org.springframework.web.servlet.view.ContentNegotiatingViewResolver
-- spring-servlet.xml 配置文件
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:util="http://www.springframework.org/schema/util"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"><mvc:annotation-driven/><context:component-scan base-package="org.wash.*"/><bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"><property name="mediaTypes"><map><entry key="atom" value="application/atom+xml"/><entry key="html" value="text/html"/><entry key="json" value="application/json"/></map></property><property name="viewResolvers"><list><bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property><property name="prefix" value="/WEB-INF/views/"/><property name="suffix" value=".jsp"/></bean></list></property><property name="defaultViews"><list><bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" /></list></property></bean>
注意事项: 一定要记得在上述文件中添加 <mvc:annotation-driven/> 否则会出现 406 状态码
model 层:
@XmlRootElementpublic class SchoolModel implements java.io.Serializable {private String name;private int sum;private int history; // 历史private Date createTime; //创建时间public SchoolModel() {super();}@XmlElementpublic String getName() {return name;}..........}
注意事项:
其中 @XmlRootElement 和 @XmlElement 注解表示该model 支持xml格式的数据,也就是说,如果想要
返回xml格式的数据,应该在model名添加@ XmlRootElement 与 属性的 get.....() 方法添加 @XmlElement注解
controller 层
@Controller@RequestMapping(value = "/user")public class OneController {/*** 支持返回json格式的数据* @return*/@RequestMapping(value="/showSaveUser",method=RequestMethod.GET)@ResponseBodypublic UserModel showUserInfo(){UserModel user = new UserModel();user.setAge(12);user.setEmail("9023023@qq.com");user.setUsername("testUserName");return user;}}
注意事项:
应该在输出格式的数据方法上面添加@ResposeBody注解,该注解会自动生效,与spring-servlet.xml 文件中
的 < mvc:annotation-driven /> 对应,
支持json/xml格式的还需要第三方jar包的支持,有如下几个:
com.fasterxml.jackson.annotations.jar
com.fasterxml.jackson.core.jar
jackson-databind-2.2.3
① 访问地址为: http://localhost/IntentWash/user/ showSaveUser.json
① 访问结果
{"username":"testUserName","email":"9023023@qq.com","age":12}
② 访问地址: http://localhost/IntentWash/user/ showSaveUser.xml
② 返回结果:
<userModel><age>12</age><email>9023023@qq.com</email><username>testUserName</username></userModel>
③ 访问地址: http://localhost/IntentWash/user/ showSaveUser.atom
③ 返回结果:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><userModel><age>12</age><email>9023023@qq.com</email><username>testUserName</username></userModel>
④ 访问地址: http://localhost/IntentWash/user/ showSaveUser (默认)
注意在方法中不带后缀为默认返回格式,默认返回格式取决于 请求 Accept,
如果 accept=application/xml 则默认返回 xml格式的数据,
如果 accpet=application/json 则默认返回json格式的数据
注意事项:
① chrome 浏览器用户可以添加 ModHeader 插件来模拟 添加 requet Header中的accept ,来测试程序是否符合预期反返回结果
② 在测试完以后,一定要记得删除掉添加的 accept,否则 controller 中正常跳转到view视图会出现问题 ,而且浏览器在浏览网页时也有可能出现问题,
版权声明:本文为u010695794原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。