springMVC我觉得比struts2好的其中一个原因就是可以使用注解解析json数据,方便快捷。但是,即使如此,还是有需要注意的地方。
1、返回的地方设置@ResponseBody,请求的对象参数@RequestBody,单个参数不用加@RequestBody;
@RequestMapping(value="/validation")
public @ResponseBody String validation(String username) throws Exception{
return username;
}
2、如果要返回的是一个对象,那么直接返回,spring会自动转为json数据。
@RequestMapping(value="/validation")
public @ResponseBody User validation(String username) throws Exception{
User u = new User(username);
return u;
}
3、如果传过来的是一个json字符串,可以用对象封装起来,使用@RequestBody会帮我们将json转为对应的对象。
@RequestMapping(value="/validation") public String validation(@RequestBody User user)throws Exception{
return "index"; }
注意:
1、单个参数的情况
a)、单个参数不要用@RequestBody,可以用@RequestParam。
错误的情况:GET:出现400参数不合法或POST:出现username=a,key和value一起传到参数中
@RequestMapping(value="/validation")
public String validation(@RequestParam("name") String username) throws Exception{
return "index";
}
b)、单个参数不要加'contentType' : 'application/json'。contentType: 'application/json', 这句去掉,这句是描述请求包内容格式的,你应该采用默认的application/x-www-form-urlencoded才能正确被服务器解析。
错误的情况:使用@RequestParam出现400错误;使用@RequestBody出现key和value一起传到参数中
2、如果是@RequestBody整个对象的话,那么就要加'contentType' : 'application/json'。不加的话,可能会出现406Not Acceptable
$('#username').blur(function(){
var postdata = '{"username":"' + $('#username').val() + '","password":"' + $('#password').val() + '"}';
$.ajax({
url:"validation",
type:"post",
cache:false,
contentType: 'application/json',
data:postdata,
dataType:'json',
success:function(result){
}
});
});
3、如果使用springMVC并使用ajax添加了 'contentType' : 'application/json'后,data必须为一个严格json字符串,可以用JSON.stringify()转换。