@ModelAttribute注解详解
1.@ModelAttribute定义:
被该注解定义的方法,会在该方法所在的controller的任何目标方法执行之前执行
2.@ModelAttribute使用:
1)应用场景:
当我们需要修改一个user的信息时,我们希望只修改部分属性值,其他属性值保留。
这个时候我们就需要用@ModelAttribute定义一个方法,这个方法在目标方法执行之前执行。
先到数据库查询到需要修改的user,转到目标方法,将表单的数据赋值到这个user中,最后将user作为目标方法的入参传给目标方法处理。
由于我们先从数据库中查询到了user,并将表单中的数据(这些数据只是user实体中的部分属性)赋值给该user,这样我们就达到了我们的需求。
即:当我们需要修改一个user的信息时,我们希望只修改部分属性值,其他属性值保留。
2)代码:
@ModelAttribute public void getUser(@RequestParam(value="id", required=false) Integer id, Map<String, Object> map){ if(id!=null){ User user = new User(); //模拟从数据库中取出user map.put("user", user); } }
注意:
1.@RequestParam注释中一定要添加required=false,为什么?我们想一想,被@RequestParam修饰的方法会在所有(有关的、无关的)目标方法执行之前执行,
如果某个方法的请求没有请求参数id,那么将会抛出异常
2.将查询到的user保存到map中
@RequestMapping(value="/userOption", method=RequestMethod.PUT) public String modifyUser(User user){ System.out.println(user); return "success"; }
注意: