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!

    到此问题解决!

  • 相关阅读:
    Python模块之re模块
    Python-正则
    Python算法之二分查找法
    Python函数之递归函数
    Python练习题
    Python函数之匿名函数
    PHP iconv 解决utf-8和gb2312编码转换问题
    IE Firefox 中ZIndex的高低准则
    由于您和其他用户试图同时改变同一数据,导致 Microsoft Jet 数据库引擎停止进程解决办法
    Image MagicK 速查
  • 原文地址:https://www.cnblogs.com/mokingone/p/9108994.html
Copyright © 2011-2022 走看看