二、添加全局数据(搭配 @ModelAttribute)
1,设置全局数据
(1)@ControllerAdvice 是一个全局数据处理组件,因此也可以在 @ControllerAdvice 中配置全局数据,使用 @ModelAttribute 注释进行配置。
(1)这里我们在全局配置中添加了两个方法:
- message 方法:返回一个 String。
- userInfo 方法:返回一个 map。
(2)这两个方法有一个注解 @ModelAttribute,其中 value 属性表示这条返回数据的 key,而方法的返回值是返回数据的 value。
package com.example.demo;
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 "欢迎访问 hangge.com";
}
@ModelAttribute(value = "info")
public Map<String, String> userinfo() {
HashMap<String, String> map = new HashMap<>();
map.put("name", "hangge");
map.put("age", "100");
return map;
}
}
(2)当然 @ModelAttribute 也可以不写 value 参数,直接在方法中对全局 Model 设置 key 和 value。下面代码的效果同上面是一样的:
package com.example.demo;
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", "欢迎访问 hangge.com");
HashMap<String, String> map = new HashMap<>();
map.put("name", "hangge");
map.put("age", "100");
model.addAttribute("info", map);
}
}
2、获取全局数据
(1)在任意请求的 Controller 中,方法参数中通过 @ModelAttribute 可以获取指定的全局数据,样例代码如下:
package com.example.demo;
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("/hello")
public String hello(@ModelAttribute("msg") String msg,
@ModelAttribute("info") Map<String, String> info) {
String result = "msg:" + msg + "<br>" + "info:" + info;
return result;
}
}

(2)我们也可以在请求的 Controller 方法参数中的 Model 获取所有的全局数据,下面代码的结果同上面的一样:
package com.example.demo;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.Map;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(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;
}
}