目录
写在前面,我使用的是springboot2.6.7来进行测试。
1.注释返回值为void的方法
@Controller
public class HelloController {
@ModelAttribute
public void addMessage(String message, Model model){
model.addAttribute("message",message);
}
@GetMapping("/hello")
public String hello(){
return "hello";
}
}
当执行http://localhost:8080/hello?message=xxx的时候,先执行addMessage方法获取message参数的值放在model中,在视图中可以获取。
2.注释返回值为具体对象的方法
@ModelAttribute(value = "myUser")
public User addUser() {
User user = new User();
user.setName("小王");
user.setSex("男");
user.setAge(12);
return user;
}
@GetMapping("/hello2")
public String hello() {
return "hello" ;
}
在执行/hello2之前会先调用addUser方法,会隐式的执行model.addAttribute("myUser",user);
这里我们在注解的后面指定了valu的值为myUser,因此这里model中的attributeName就为myUser,如果我们不指定Value的值,那么默认就是返回类型的类名的小写,这里如果我们不写那么就是这样的model.addAttribute("user",user);
页面如下
执行方法
3.对象合并
比如我们在修改某条记录的时候,我们仅仅是修改了某一个字段的值,其他的字段值不变。这里我们模拟一下。
/**
* 这里我们模拟,在对数据修改前先查询数据库的记录,返回完整的User对象
* @return
*/
@ModelAttribute(value = "myUser")
public User getUser() {
User user = new User();
user.setName("小王");
user.setSex("男");
user.setAge(12);
return user;
}
/**
* 这里只针对user对象的年龄进行修改,其余属性值保持不变
* @param user
* @return
*/
@GetMapping("/hello3")
public String hello(@ModelAttribute(value = "myUser") User user) {
user.setAge(32);
return "hello" ;
}
访问方法看结果