zoukankan      html  css  js  c++  java
  • 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;
        }
    早年同窗始相知,三载瞬逝情却萌。年少不知愁滋味,犹读红豆生南国。别离方知相思苦,心田红豆根以生。
  • 相关阅读:
    jQuery offset获取坐标不精确的问题
    RPG Maker VX地图随机气泡对话 Ver1.0
    Qt绘图控件qwt绘制等比例坐标图
    Java服务端极光推送整合Ios、Android
    Jpush给 iOS 平台推送 title 值失败
    java之Hibenate中监听事件的重写和二级cache缓存
    java之Hibeante中SQL语句的使用
    Hibernate注解符合主键关联关系、持久化传播、继承映射
    hibernate之数据库注解关联关系
    hibernate(四) 双向多对多映射关系
  • 原文地址:https://www.cnblogs.com/shanheyongmu/p/15688866.html
Copyright © 2011-2022 走看看