SpringBoot 对注解@ModelAttribute 总结
·
问题
@ModelAttribute注解接受postman传json参数接收不到值.其实对@ModelAttribute 了解也不太深,于是就是研究一番!
@RequestMapping("/test")
public String test(@ModelAttribute("user") User user2) {
System.out.println("user2"+JSON.toJSONString(user2));
return "test";
}
这样无法接收到postman传入的JSON数据.
其实主要是对@ModelAttribute用法不够了解。
@ModelAttribute 注解可以用在方法上和 方法的参数上。
- 注解在方法上
被@ModelAttribute注释的方法会在此controller每个方法执行前被执行。因此对于一个controller映射多个URL的用法来说,要谨慎使用。 - @ModelAttribute注释一个方法的参数
注解方法参数有两种情况
a.从model中获取 例如下面:
@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 还有一种写法
public User addUser(@RequestBody User user) {
System.out.println("ModelAttribute:"+1);
return user;
}
在这个例子里,@ModelAttribute(“user”) User user2注释方法参数,参数user的值来源于addUser()方法中的model属性。
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
像下面:
@RequestMapping("/test")
public String test(@RequestBody @ModelAttribute("user") User user2) {
System.out.println("user2"+JSON.toJSONString(user2));
return "test";
}
然后发现根本行不通,所以只能采用 a.从model中获取 !
所以有了下面的解决方案:
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";
}
更多推荐
已为社区贡献4条内容
所有评论(0)