Spring @ModelAttribute 总结

问题

  写这边文章是因为最近在看了一个Issues ,@ModelAttribute注解接受postman传json参数接收不到值.其实我自己对@ModelAttribute 了解也不太深,于是就是研究一番!

问题

 @RequestMapping("/test")
    public String test(@ModelAttribute("user") User user2) {
        System.out.println("user2"+JSON.toJSONString(user2));
        return "test";
    }

这样无法接收到postman传入的JSON数据.

其实主要是对@ModelAttribute用法不够了解。

@ModelAttribute 注解可以用在方法上和 方法的参数上。

  1. 注解在方法上
    被@ModelAttribute注释的方法会在此controller每个方法执行前被执行。因此对于一个controller映射多个URL的用法来说,要谨慎使用。
  2. @ModelAttribute注释一个方法的参数
    注解方法参数有两种情况
    a.从model中获取 例如下面:
      @ModelAttribute("user")
    public void addUser(@RequestBody User user, Model model) {
        System.out.println("ModelAttribute:"+1);
        model.addAttribute(user);
    }
    /**
     * test
     * @return string
     */
    @RequestMapping("/test")
    public String test(@ModelAttribute("user") User user2) {
        System.out.println("user2"+JSON.toJSONString(user2));
        return "test";
    }

其中 addUser 还有一种写法

   public User addUser(@RequestBody User user) {
       System.out.println("ModelAttribute:"+1);
       return user;
    }

在这个例子里,@ModelAttribute(“user”) User user2注释方法参数,参数user的值来源于addUser()方法中的model属性。

b.从Form表单或URL参数中获取(实际上,不做此注释也能拿到user对象)

 @RequestMapping("/test")
    public String test(@ModelAttribute("user") User user2) {
        System.out.println("user2"+JSON.toJSONString(user2));
        return "test";
    }

因为上面的问题是要接收 JSON格式数据,所以b没办法满足情况。我开始的想的解决办法是加@RequestBody
像下面:

@RequestMapping("/test")
    public String test(@RequestBody @ModelAttribute("user") User user2) {
        System.out.println("user2"+JSON.toJSONString(user2));
        return "test";
 }

然后发现根本行不通,所以只能采用 a.从model中获取 !
所以有了下面的解决方案:

   public User addUser(@RequestBody User user) {
       System.out.println("ModelAttribute:"+1);
       return user;
    }

 @RequestMapping("/test")
    public String test(@RequestBody @ModelAttribute("user") User user2) {
        System.out.println("user2"+JSON.toJSONString(user2));
        return "test";
 }

其中关键点就是 @RequestBody!

到此问题解决!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值