您的位置:首页 > 编程语言 > Java开发

Spring MVC Ajax Json

2017-12-24 09:21 169 查看
请求数据为空,响应数据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
void
testAjax(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);      
     
4000
  },
    });
}

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

@RequestBody
该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据自动绑定方法的形参对象上
这里把json格式的字符串自动映射给相应的对象上。
 

通俗讲就是:

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

Json字符串需要解析器的解析(毕竟是json格式的字符串可能包含数组,服务器看不懂)
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息