SpringMVC-9 处理JSON数据

  SpringMVC处理JSON数据的具体实现代码下载地址:http://download.csdn.net/download/bingbeichen/9797439


1. 具体实现

  ①. 添加jackson所需要的jar包
  这里写图片描述
  ②. 编写目标方法,使其直接返回JSON对应的对象或集合,并在方法上添加@ResponseBody注解

@ResponseBody
@RequestMapping("/testJson")
public Collection<Employee> testJson() {
    System.out.println("testJson...");
    return employeeDao.getEmployees(); 
}

  ③. 使用jQuery发送Ajax请求,并获取返回的JSON数据

<!-- 注意:在加入jQuery后,需要对静态资源进行特殊处理 -->
<script type="text/javascript" src="scripts/jquery-1.7.2.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 name = data[i].name;
                    var email = data[i].email;
                    alert("Employee [id=" + id + ", name=" + name + ", email=" + email + "]");
                }
            });
            return false;
        });
    })
</script>

<body>
    <a href="testJson" id="testJson">Test JSON</a>
</body>

2. 基本原理

  SpringMVC在处理JSON数据时,需要使用HttpMessageConverter接口,其是Spring3.0新添加的接口,主要负责将请求信息转换为一个Java对象(类型为 T),或将Java对象(类型为 T)输出为响应信息
  HttpMessageConverter的基本流程如下图所示:
  这里写图片描述
  HttpMessageConverter的实现类主要有:
  这里写图片描述
  DispatcherServlet默认装配有ReuqestMappingHandlerAdapter,而ReuqestMappingHandlerAdapter默认装配的HttpMessageConverter如下:
  这里写图片描述
  加入Jackson所需要的jar包后,RequestMappingHandlerAdapter装配的HttpMessageConverter如下:
  这里写图片描述
  由此可见,在加入Jackson所需要的jar包后,SpringMVC会自动将MappingJackson2HttpMessageConverter装配上,以实现对JSON数据的处理。


3. 使用HttpMessageConverter

  使用HttpMessageConverter<T>将请求信息转化并绑定到处理方法的入参中或将响应结果转化为对应类型的响应信息,SpringMVC提供了两种途径:
  ①. 使用@RequestBody标注处理方法的入参或使用@ResponseBody标注处理方法;
  ②. 使用HttpEntity<T>作为处理方法的入参或使用ResponseEntity<T>作为处理方法的返回值。
  当控制器的处理方法使用到@RequestBody/@ResponseBody或HttpEntity<T>/ResponseEntity<T>时,Spring首先根据请求头或响应头的Accept属性选择匹配的HttpMessageConverter,进而根据参数类型或泛型类型过滤得到匹配的HttpMessageConverter,若找不到则报错。其具体匹配原理如下图所示:
  这里写图片描述

3.1 使用@RequestBody与@ResponseBody实现文件上传
<!-- index.jsp页面 -->
<body>
    <form action="testHttpMessageConverter" method="post" enctype="multipart/form-data">
        File:<input type="file" name="file" />
        Desc:<input type="text" name="desc" />
        <input type="submit" value="submit" />
    </form>
    <br><br>
</body>
public class TestJSON {

    @ResponseBody
    @RequestMapping("/testHttpMessageConverter")
    public String testHttpMessageConverter(@RequestBody String body) {
        // 将在控制台输出文件内容
        System.out.println(body);
        // 将在页面显示如下字符串信息
        return "helloworld : " + new Date();
    }

}
3.2 使用HttpEntity<T>实现文件下载操作
public class TestJSON {

    @RequestMapping("/testResponseEntity")
    public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws Exception {
        byte[] body = null;
        ServletContext servletContext = session.getServletContext();
        InputStream inputStream = servletContext.getResourceAsStream("/files/test.txt");
        body = new byte[inputStream.available()];
        inputStream.read(body);

        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Disposition", "attachment;filename=test.txt");

        HttpStatus statusCode = HttpStatus.OK;

        ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(body, headers, statusCode);

        return response;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值