寫這邊文章是由於最近在看了一個Issues ,@ModelAttribute註解接受postman傳json參數接收不到值.其實我本身對@ModelAttribute 瞭解也不太深,因而就是研究一番!java
問題 json
@RequestMapping("/test")
public String test(@ModelAttribute("user") User user2) {
System.out.println("user2"+JSON.toJSONString(user2));
return "test";
}
這樣沒法接收到postman傳入的JSON數據.app
其實主要是對@ModelAttribute用法不夠了解。post
@ModelAttribute 註解能夠用在方法上和 方法的參數上。spa
@ModelAttribute("user")
public void addUser(@RequestBody User user, Model model) {
System.out.println("ModelAttribute:"+1);
model.addAttribute(user);
}
/** * test * @return string */
@RequestMapping("/test")
public String test(@ModelAttribute("user") User user2) {
System.out.println("user2"+JSON.toJSONString(user2));
return "test";
}
其中 addUser 還有一種寫法code
public User addUser(@RequestBody User user) {
System.out.println("ModelAttribute:"+1);
return user;
}
在這個例子裏,@ModelAttribute(「user」) User user2註釋方法參數,參數user的值來源於addUser()方法中的model屬性。 orm
b.從Form表單或URL參數中獲取(實際上,不作此註釋也能拿到user對象) 對象
@RequestMapping("/test")
public String test(@ModelAttribute("user") User user2) {
System.out.println("user2"+JSON.toJSONString(user2));
return "test";
}
由於上面的問題是要接收 JSON格式數據,因此b沒辦法知足狀況。我開始的想的解決辦法是加@RequestBody
像下面:string
@RequestMapping("/test")
public String test(@RequestBody @ModelAttribute("user") User user2) {
System.out.println("user2"+JSON.toJSONString(user2));
return "test";
}
而後發現根本行不通,因此只能採用 a.從model中獲取 !
因此有了下面的解決方案:it
public User addUser(@RequestBody User user) {
System.out.println("ModelAttribute:"+1);
return user;
}
@RequestMapping("/test")
public String test(@RequestBody @ModelAttribute("user") User user2) {
System.out.println("user2"+JSON.toJSONString(user2));
return "test";
}
其中關鍵點就是 @RequestBody!
到此問題解決!