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()轉換。