一、SpringMVC @RequestBody接收Json對象字符串
以前,一直以為在SpringMVC環境中,@RequestBody接收的是一個Json對象,一直在調試代碼都沒有成功,后來發現,其實 @RequestBody接收的是一個Json對象的字符串,而不是一個Json對象。然而在ajax請求往往傳的都是Json對象,后來發現用
JSON.stringify(data)的方式就能將對象變成字符串。同時ajax請求的時候也要指定dataType: "json",contentType:"application/json" 這樣就可以輕易的將一個對象或者List傳到Java端,使用@RequestBody即可綁定對象或者List.
下面一個例子需要大家注意:
JavaScript 代碼:
<script type="text/javascript"> $(document).ready(function(){ test = function () {
var test = [{"userName":"test","address":"gz"},
{"userName":"ququ","address":"gr"}
];
jQuery.ajax({
url : cur_url+"/weekly/test",
type : 'post',
data : JSON.stringify(test),
dataType : 'json',
contentType:'application/json;charset=utf-8',
success : function (data, textStatus) {
console.info(data);
alert("test success!");
},
error:function(){
alert("test error!");
}
});
};
}); </script>
Java代碼
@RequestMapping("/test")
@ResponseBody
public List<User> test(@RequestBody List<User> t) {
return t;
}
這樣是不可以的。因為spring MVC不會自動轉換為List<User>對象。傳到后台后,List中是LinkedHashMap類型。
這時需要使用數組接受,如下:
@RequestMapping("/test") @ResponseBody public List<User> test(@RequestBody User[] t) { for (User user : t) { System.out.println("user:" + user); System.out.println("userName:" + user.getUserName()); System.out.println("address:" + user.getAddress()); } List<User> tt = Arrays.asList(t); for (int i = 0; i < tt.size(); i++) { User u = tt.get(i); System.out.println(i + "tt:" + u); } return tt; }
這樣就可以正常接收ajax發送的json數組字符串,上面也演示了該數組可以轉為list。這里數組名稱t不用和前台test對應,只要前台傳過來的數組中對象可以對應user對象就行。
這里返回的list<User>轉為的json字符串,前台接收如下:
1 success : function (data, textStatus) { 2 console.info(data); 3 console.info(data.length); 4 for ( var i = 0; i < data.length; i++) { 5 console.info(i + ":" + data[i].address); 6 console.info(i + ":" + data[i].userName); 7 } 8 alert("test success!"); 9 },