springMVC Ajax实现和原理

1.JSON 的jar包

JSON 的jar包

2. 编写目标方法,使其返回 JSON 对应的对象或集合

在方法上添加 @ResponseBody 注解(添加到方法上的)

ResponseBody

实现原理

  1. HttpMessageConverter 是 Spring3.0 新添加的一个接
    口,负责将请求信息转换为一个对象(类型为 T),将对象(
    类型为 T)输出为响应信息
  2. 这里写图片描述
  3. 使用 HttpMessageConverter 将请求信息转化并绑定到处理方法的入
    参中或将响应结果转为对应类型的响应信息,Spring 提供了两种途径:
    – 使用 @RequestBody / @ResponseBody 对处理方法进行标注
    – 使用 HttpEntity / ResponseEntity 作为处理方法的入参或返回值
  4. 当控制器处理方法使用到 @RequestBody/@ResponseBody 或
    HttpEntity/ResponseEntity 时, Spring 首先根据请求头或响应头的
    Accept 属性选择匹配的 HttpMessageConverter, 进而根据参数类型或
    泛型类型的过滤得到匹配的 HttpMessageConverter, 若找不到可用的
    HttpMessageConverter 将报错
  5. @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;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值