Spring MVC Ajax Json

请求数据为空,响应数据json格式的字符串

@ResponseBody

当控制器处理后不需要进行页面跳转而是返回一些数据,则需要使用@ResponseBody

@ResponseBody表示Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

 

控制层:

    @RequestMapping(value ="/testAjax",method = RequestMethod.POST)

    @ResponseBody

    public TusertestAjax(){

       Tuser user = newTuser();

       user.setUname("tom");

       user.setUpwd("123");

user.setUtype("VIP");

       returnuser;

    }

JS:

function testAjax(){

    $.ajax({

       url:"testAjax.do",

       type:"post",

success:function(data_back){           //alert(data_back);//{"uname":"tom","upwd":"123","utype":"VIP"}

           var user= JSON.parse(data_back);

           alert(user.uname);//tom

           alert(user.upwd);//123

       },

    });

}

注意:

传输的数据是字符串(json格式),所以

请求前JSON.stringify(data) 将json对象转化为字符串。

响应后JSON.parse(str) 将字符串转化为json对象。datatype默认会将返回的数据当成字符串处理,如果指定dataType:"json",,jquery会自动帮我们把字符串转化为json对象,所以不需要JSON.parse(data_back);

 

 

请求数据键值对形式,响应数据为空

请求的数据比较简单(没有数组等嵌套)

此时不用指定contentType,默认:application/x-www-form-urlencoded,请求的data数据是key/value形式,多个key用&连接

 

控制层

    @RequestMapping(value ="/testAjax",method = RequestMethod.POST)

    @ResponseBody

    public voidtestAjax(Tuseruser){

       System.out.println(user.getUname());//tom

       System.out.println(user.getUpwd());//123

    }

 

JS

function testAjax(){

    $.ajax({

       url:"testAjax.do",

       type:"post",

        data:"uname=tom&upwd=123",

       success:function(){

           alert(123);//123        

       },

    });

}

 

 

 

请求数据json格式的字符串,响应数据为空

但是如果请求的数据有数组嵌套,则不能再使用简单的键值对进行数据的传输,需要用到json格式的字符串,需要指定contentType:application/json,并在控制层用@RequestBody注解进行数据匹配映射

    @RequestMapping(value ="/testAjax",method = RequestMethod.POST)

    @ResponseBody

    public void testAjax(@RequestBody Tuseruser){

       System.out.println(user.getUname());//tom

       System.out.println(user.getUpwd());//123

       System.out.println(user.getSites()[0]);//北京

       System.out.println(user.getSites()[1]);//上海

       System.out.println(user.getSites()[2]);//广州

 

    }

JS

function testAjax(){

    var user= {

       uname:"tom",

       upwd:"123",

       sites:["北京", "上海", "广州" ]    

    };

 

    $.ajax({

       url:"testAjax.do",

       type:"post",

       data:JSON.stringify(user),

       contentType:"application/json",

       success:function(){

           alert(123);      

       },

    });

}

注意此时contentType:"application/json"需要与@RequestBody配对使用

@RequestBody

该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据自动绑定方法的形参对象上

这里把json格式的字符串自动映射给相应的对象上。

 

通俗讲就是:

键值对形式的请求没有走HttpMessageConverter解析器(普通键值对,服务器自动匹配)

Json字符串需要解析器的解析(毕竟是json格式的字符串可能包含数组,服务器看不懂)

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值