前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >@ModelAttribute注解的详解

@ModelAttribute注解的详解

作者头像
用户2409797
发布2018-08-30 17:33:06
1.1K0
发布2018-08-30 17:33:06
举报

@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";
    }

注意:

1.在@ModelAttribute方法结束,目标方法开始之前,springmvc为我们做了一件事:从map中取出user,将表单数据赋值给user,将user传给目标方法的入参
2.这时,目标方法的入参user就是我们修改过后的user(包括修改过的数据和没被修改的数据),之后我们就可以将use保存到数据库了
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-09-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • @ModelAttribute注解的详解
    • 1.@ModelAttribute定义:
      • 2.@ModelAttribute使用:
        • 1)应用场景:
        • 2)代码:
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档