• SpringBoot @ControllerAdvice的使用详解2(添加全局数据 @ModelAttribute)


    二、添加全局数据(搭配 @ModelAttribute)

    1,设置全局数据

    (1)@ControllerAdvice 是一个全局数据处理组件,因此也可以在 @ControllerAdvice 中配置全局数据,使用 @ModelAttribute 注释进行配置。
    (1)这里我们在全局配置中添加了两个方法:

    • message 方法:返回一个 String。
    • userInfo 方法:返回一个 map。

    (2)这两个方法有一个注解 @ModelAttribute,其中 value 属性表示这条返回数据的 key,而方法的返回值是返回数据的 value。

    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ModelAttribute;
    import java.util.HashMap;
    import java.util.Map;
     
    @ControllerAdvice
    public class GlobalConfig {
     
        @ModelAttribute(value = "msg")
        public String message() {
            return "hello index";
        }
     
        @ModelAttribute(value = "info")
        public Map<String, String> userinfo() {
            HashMap<String, String> map = new HashMap<>();
            map.put("name", "小明");
            map.put("age", "25");
            return map;
        }
    }

    (2)当然 @ModelAttribute 也可以不写 value 参数,直接在方法中对全局 Model 设置 key 和 value。下面代码的效果同上面是一样的:

    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ModelAttribute;
    import java.util.HashMap;
     
    @ControllerAdvice
    public class GlobalConfig {
     
        @ModelAttribute
        public void addAttributes(Model model) {
            model.addAttribute("msg", "hello index");
     
            HashMap<String, String> map = new HashMap<>();
            map.put("name", "小明");
            map.put("age", "25");
            model.addAttribute("info", map);
        }
    }

    2,获取全局数据

    (1)在任意请求的 Controller 中,方法参数中通过 @ModelAttribute 可以获取指定的全局数据,样例代码如下:
    import org.springframework.web.bind.annotation.ModelAttribute;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.bind.annotation.GetMapping;
    import java.util.Map;
     
    @RestController
    public class HelloController {
        @GetMapping("/hello1")
        public String hello1(@ModelAttribute("msg") String msg,
                          @ModelAttribute("info") Map<String, String> info) {
            String result = "msg:" + msg + "<br>" + "info:" + info;
            return result;
        }
    }

     

    (2)我们也可以在请求的 Controller 方法参数中的 Model 获取所有的全局数据,下面代码的结果同上面的一样:
     @GetMapping("/hello2")
        public String hello2(Model model) {
            Map<String, Object> map = model.asMap();
            String msg = map.get("msg").toString();
            Map<String, String> info = (Map<String, String>)map.get("info");
            String result = "msg:" + msg + "<br>" + "info:" + info;
            return result;
        }
    早年同窗始相知,三载瞬逝情却萌。年少不知愁滋味,犹读红豆生南国。别离方知相思苦,心田红豆根以生。
  • 相关阅读:
    AD账号解锁
    Django中的DateTimeField格式
    接口调用,输出结果为Json格式(ConvertTo-Json),提交参数给URL(WebRequest)
    jQuery表格排序(tablesorter)
    Python脚本性能分析
    监控文件内容变化,即时写入到新文件(tail)
    导出目录权限
    多进程、多线程处理文件对比
    shell 实例收集
    DHCP : 网络世界身份的获取
  • 原文地址:https://www.cnblogs.com/shanheyongmu/p/15688866.html
Copyright © 2020-2023  润新知