一 、@RequestBody
@RequestBody接收的是一個Json對象的字符串,而不是一個Json對象。然而在ajax請求往往傳的都是Json對象,后來發現用 JSON.stringify(data)的方式就能將對象變成字符串。同時ajax請求的時候也要指定dataType: "json",contentType:"application/json" 這樣就可以輕易的將一個對象或者List傳到Java端,使用@RequestBody即可綁定對象或者List.
$(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){ } }); });
@RequestMapping(value = "saveUser", method = {RequestMethod.POST }}) @ResponseBody public void saveUser(@RequestBody List<User> users) { userService.batchSave(users); }
二 、@ModelAttribute
1.使用在方法參數上
用於接收key,value形式參數
此方法會先從model去獲取key為"user"的對象,如果獲取不到會通過反射實例化一個User對象,再從request里面拿值set到這個對象,然后把這個User對象添加到model(其中key為"user").
@Controller public class Hello2ModelController extends BaseController { @RequestMapping(value = "/helloWorld2") public String helloWorld(@ModelAttribute("myUser") User user) { user.setName("老王"); return "helloWorld"; } }
model中key為myUser ,前台可以直接通過${myUser.xx}獲取user相應屬性
2. 使用在方法上
2.1 使用在無返回類型方法上時
@Controller public class HelloModelController { @ModelAttribute public void populateModel(@RequestParam String abc, Model model) { model.addAttribute("attributeName", abc); } @RequestMapping(value = "/helloWorld") public String helloWorld() { return "helloWorld"; } }
每次調用/helloWorld時都會先執行populateModel方法,並把前台abc 設置到attributeName 屬性中,然后再調用helloWorld方法,前台頁面可以直接都去attributeName的值
2.2 使用在有返回類型的方法上時
@Controller public class Hello2ModelController { @ModelAttribute public User populateModel() { User user=new User(); user.setAccount("ray"); return user; } @RequestMapping(value = "/helloWorld2") public String helloWorld() { return "helloWorld"; } }
首先執行populateModel方法,並默認 根據返回類型設置model 的屬性,比如User類型就設置model的key為user,value為返回值.然后執行helloworld方法,前台可以直接通過${user.accout}獲取值,
以上兩種方法都也可以指定ModelAttribute(value="useraaaa")或者ModelAttribute("useraaaa")這樣的話加入model中的key就是useraaa了.