1.准备环境,加入jar包(jackson)
2. 编写目标方法,使其返回 JSON 对应的对象或集合
3. 在方法上添加 @ResponseBody 注解
4.目标方法,添加了@ResponseBody 注解。
jsp页面发送“testJson”的ajax请求到目标方法,返回一组json数据
<script type="text/javascript" src="scripts/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
$(function(){
$("#testJson").click(function(){
var url = this.href;
var args = {};
$.post(url,args,function(data){
for(var i = 0;i<data.length; i++){
var id = data[i].id;
var lastName = data[i].lastName
alert(id + ":" + lastName);
}
});
return false;
});
})
</script>
</head>
<body>
<a href="testJson" id="testJson"> Test Json</a>
</body>
@ResponseBody
@RequestMapping("/testJson")
public Collection<Employee> testJson(){
return employeeDao.getAll();
}
5.实现原理。
HttpMessageConverter<T>: 是 Spring3.0 新添加的一个接口,负责将请求信息转换为一个对象(类型为 T),将对象(
类型为 T)输出为响应信息
5.1 HttpMessageConverter<T>实现类:
5.2 工作原理。
请求消息被转化为HttpInoutMessage对象,在由HttpMessageConverter把HttpInoutMessage转化为
SpringMVC需要的java对象。返回相同。
5.3 在添加完jackson的jar包后,会将装配HttpMessageConverter<T>的一个实现类
MappingJackson2HttpMessageConverter类,这个类就是利用Jackson来源包读写JSON数据
当控制器处理方法使用到 @RequestBody/@ResponseBody Spring 首先根据请求头或响应头的
Accept 属性选择匹配的 HttpMessageConverter(MappingJackson2HttpMessageConverter)
进而根据参数类型或泛型类型的过滤得到匹配的 HttpMessageConverter(MappingJackson2HttpMessageConverter)
5.4 @RequestBody是用来修饰入参的,也就是说会根据会把传进来的参数根据需求转换为对应的格式。
@ResponseBody修饰方法,会把输出的参数转化为需要的格式,此处转化为JSON格式。
5.5 @RequestBody 和 @ResponseBody 不需要成对出现