本人博客已移至: 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/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/mvc
http://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 层:
@XmlRootElement
public class SchoolModel implements java.io.Serializable {
private String name;
private int sum;
private int history; // 历史
private Date createTime; //创建时间
public SchoolModel() {
super();
}
@XmlElement
public 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)
@ResponseBody
public 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.jarcom.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视图会出现问题,而且浏览器在浏览网页时也有可能出现问题,