请求数据为空,响应数据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格式的字符串可能包含数组,服务器看不懂)