站长推广SpringBoot对注解@ModelAttribute总结
问题
@ModelAttribute注解接受postman传json参数接收不到值.其实对@ModelAttribute 了解也不太深,于是就是研究⼀番!
@RequestMapping("/test")
public String test(@ModelAttribute("ur") Ur ur2) {
System.out.println("ur2"+JSONString(ur2));
return "test";
皮部}
这样⽆法接收到postman传⼊的JSON数据.
其实主要是对@ModelAttribute⽤法不够了解。
疫情的话@ModelAttribute 注解可以⽤在⽅法上和 ⽅法的参数上。
1. 注解在⽅法上
被@ModelAttribute注释的⽅法会在此controller每个⽅法执⾏前被执⾏。因此对于⼀个controller映射多个URL的⽤法来说,要谨慎使⽤。
2. @ModelAttribute注释⼀个⽅法的参数
注解⽅法参数有两种情况
a.从model中获取 例如下⾯:
@ModelAttribute("ur")
public void addUr(@RequestBody Ur ur, Model model) {
System.out.println("ModelAttribute:"+1);
model.addAttribute(ur);
属兔名人}
/**
* test
* @return string
*/
@RequestMapping("/test")
public String test(@ModelAttribute("ur") Ur ur2) {
System.out.println("ur2"+JSONString(ur2));
return "test";
}
其中 addUr 还有⼀种写法
public Ur addUr(@RequestBody Ur ur) {
System.out.println("ModelAttribute:"+1);
return ur;
}
在这个例⼦⾥,@ModelAttribute(“ur”) Ur ur2注释⽅法参数,参数ur的值来源于addUr()⽅法中的model属性。
b.从Form表单或URL参数中获取(实际上,不做此注释也能拿到ur对象)
曼联vs阿森纳@RequestMapping("/test")
public String test(@ModelAttribute("ur") Ur ur2) {
System.out.println("ur2"+JSONString(ur2));
return "test";
中国大学生就业网}
因为上⾯的问题是要接收 JSON格式数据,所以b没办法满⾜情况。我开始的想的解决办法是加@RequestBody 像下⾯:
@RequestMapping("/test")
public String test(@RequestBody @ModelAttribute("ur") Ur ur2) {
System.out.println("ur2"+JSONString(ur2));
return "test";
}
然后发现根本⾏不通,所以只能采⽤ a.从model中获取 !
所以有了下⾯的解决⽅案:煎饺
public Ur addUr(@RequestBody Ur ur) {
System.out.println("ModelAttribute:"+1);
return ur;
}
@RequestMapping("/test")
public String test(@RequestBody @ModelAttribute("ur") Ur ur2) {
System.out.println("ur2"+JSONString(ur2));
return "test";
大张声势
}