写这边文章是由于最近在看了一个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!
到此问题解决!