一:遇到個跨域調用,因為傳個我的參數不定,是以需要通過map來接收參數并進行簽名驗證等操作
寫出了下面的代碼,但是發現map裡并沒有擷取到傳來的key-value值
@RequestMapping(value = "/callback", produces = "text/html;charset=UTF-8")
@ResponseBody
public String callback(@RequestBody Map<String, String> params) {
return null;
}
之後我發現HttpServletRequest有一個getParameterMap方法
@RequestMapping(value = "/callback", produces = "text/html;charset=UTF-8")
@ResponseBody
public String callback(HttpServletRequest httpServletRequest) {
Map<String, String> params = httpServletRequest.getParameterMap();
return null;
}
然而這麼寫還是不行,因為這個方法其實是傳回的一個Map<String, String[]>對象,而不是我想象中的Map<String, String>類型,這裡是可以獲得正确的參數的,但是需要手動進行轉換,一定有更好的解決辦法,然後我用@RequestParam綁定
@RequestMapping(value = "/callback", produces = "text/html;charset=UTF-8")
@ResponseBody
public String callback(@RequestParam Map<String, String> params) {
return null;
}
二:以前一直以為在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(){
var saveDataAry=[];
var data1={"userName":"test","address":"gz"};
var data2={"userName":"ququ","address":"gr"};
saveDataAry.push(data1);
saveDataAry.push(data2);
$.ajax({
type:"POST",
url:"user/saveUser",
dataType:"json",
contentType:"application/json",
data:JSON.stringify(saveData),
success:function(data){
}
});
});
</script>
Java代碼
@RequestMapping(value = "saveUser", method = {RequestMethod.POST }})
@ResponseBody
public void saveUser(@RequestBody List<User> users) {
userService.batchSave(users);
}