RequestBody的用法
@RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。然而在ajax请求往往传的都是Json对象,后来发现用 JSON.stringify(data)的方式就能将对象变成字符串。同时ajax请求的时候也要指定dataType: "json",contentType:"application/json" 这样就可以轻易的将一个对象或者List传到Java端,使用@RequestBody即可绑定对象或者List.
JS写法:
<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>
Spring写法:
@RequestMapping(value = "saveUser", method = {RequestMethod.POST }})
@ResponseBody
public void saveUser(@RequestBody List<User> users) {
userService.batchSave(users);
}
对于前端传过来的json数据,也可以用Map来接收,如下:
@ResponseBody
@RequestMapping(value = "/insertUser", method = RequestMethod.POST)
public Result<String> insertUser(@RequestBody Map<String, Object> params) {
AntUserInfo userInfo = getAntUserInfo();
String fenceNo = ObjectUtils.toString(params.get("fenceNo"));
String fenceName = ObjectUtils.toString(params.get("fenceName"));
// 参数解析
JSONArray userList = null;
try {
userList = JSONArray.parseArray(ObjectUtils.toString(params.get("userList")));
} catch (Exception e) {
throw new ServiceException("用户参数格式错误", "500");
}
List<UserSave> saveList = new ArrayList<UserSave>();
if (userList != null) {
for (int i = 0; i < userList.size(); i++) {
JSONObject userObject = userList.getJSONObject(i);
String userName = ObjectUtils.toString(userObject.get("userName"));
String userId = ObjectUtils.toString(userObject.get("userId"));
String mobilePhone = ObjectUtils.toString(userObject.get("mobilePhone"));
}
}
return service.insertUser(saveList, fenceNo);
}
}