1.JSON 的jar包
2. 编写目标方法,使其返回 JSON 对应的对象或集合
在方法上添加 @ResponseBody 注解(添加到方法上的)
实现原理
- HttpMessageConverter 是 Spring3.0 新添加的一个接
口,负责将请求信息转换为一个对象(类型为 T),将对象(
类型为 T)输出为响应信息 - 使用 HttpMessageConverter 将请求信息转化并绑定到处理方法的入
参中或将响应结果转为对应类型的响应信息,Spring 提供了两种途径:
– 使用 @RequestBody / @ResponseBody 对处理方法进行标注
– 使用 HttpEntity / ResponseEntity 作为处理方法的入参或返回值 - 当控制器处理方法使用到 @RequestBody/@ResponseBody 或
HttpEntity/ResponseEntity 时, Spring 首先根据请求头或响应头的
Accept 属性选择匹配的 HttpMessageConverter, 进而根据参数类型或
泛型类型的过滤得到匹配的 HttpMessageConverter, 若找不到可用的
HttpMessageConverter 将报错 - @RequestBody 和 @ResponseBody 不需要成对出现
jsp页面传输
$(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;
});
})
没有参数接收,直接返回集合
@ResponseBody
@RequestMapping("/testJson")
public Collection<Employee> testJson(){
return employeeDao.getAll();
}
有参数,随便在页面中打印 @RequestBody 修饰入参
@ResponseBody
@RequestMapping("/testHttpMessageConverter")
public String testHttpMessageConverter(@RequestBody String body){
System.out.println(body);
return "helloworld! " + new Date();
}
使用 HttpEntity、ResponseEntity 上传下载
下载片段
@RequestMapping("/testResponseEntity")
public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOException{
byte [] body = null;
ServletContext servletContext = session.getServletContext();
InputStream in = servletContext.getResourceAsStream("/files/abc.txt");
body = new byte[in.available()];
in.read(body);
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Disposition", "attachment;filename=abc.txt");
HttpStatus statusCode = HttpStatus.OK;
ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(body, headers, statusCode);
return response;
}