@ModelAttribute 注解可被应用在方法或方法参数上,注解在方法上的 @ModelAttribute 说明了方法的作用是用于添加一个或多个属性到model上。
这样的方法能接受与 @RequestMapping 注解相同的参数类型,只不过不能直接被映射到具体的
请求上。在同一个控制器中,注解了 @ModelAttribute 的方法实际上会在 @RequestMapping 方
法之前被调用
来个简单栗子:
返回类:
public class JsonData<T> {
private boolean ret;
private String msg;
private T date;
}
@ModelAttribute
public User check(String param){
System.out.println("---------------"+param+"-----------");
User user = new User();
if("a".equals(param)){
user.setUsername("a");
}else{
user.setUsername("other");
}
return user;
}
@RequestMapping("/m1")
@ResponseBody
public JsonData modelAttribute(String param,@ModelAttribute User user){
System.out.println(param);
System.out.println("username:"+user.getUsername());
return new JsonData(true,param);
}
请求:http://localhost/m1?param=a
结果:{“ret”:true,”msg”:null,”date”:”a”}
由此可以看出@ModelAttribute注解在@RequestMapping 方法之前被调用 。
所以:@ModelAttribute 方法通常被用来填充一些公共需要的属性或数据,比如一个下拉列表所预设
的几种状态,或者宠物的几种类型,或者去取得一个HTML表单渲染所需要的命令对象,比
如 Account 等