zoukankan      html  css  js  c++  java
  • 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!

    到此问题解决!

  • 相关阅读:
    工作生活中需要知道的常识名词
    ICON的设计很重要
    100offer 为专业程序打造的招聘平台
    2014年工作生活大总结
    游戏模块分析总结(3)之引导篇
    游戏模块分析总结(2)之UI、操作篇
    数字证书及CA介绍
    Hyperledger Fabric密码模块系列之BCCSP(五)
    GDB十分钟教程
    Hyperledger Fabric密码模块系列之BCCSP(四)
  • 原文地址:https://www.cnblogs.com/mokingone/p/9108994.html
Copyright © 2011-2022 走看看