在不同控制器的视图之间共享 modelAttribute

Sharing modelAttribute between views of different controllers

在我当前的 Spring 项目(使用 Thymeleaf)中,我有这两个控制器 HomeController 和一个扩展到模型层中与实体关联的所有控制器的通用控制器。

HomeController 中,我有这个 modelAttribute 方法:

@ModelAttribute("usuario")
public Usuario usuario() {
  return usuario.findBy("username", SecurityContextHolder.getContext().getAuthentication().getName());
}

这显然可以通过此控制器中映射的视图访问。有什么方法可以将此 modelAttribute 与映射到另一个控制器中的视图共享吗?

我在很多地方读到过这个 RedirectAttributes 资源,但我猜它只适用于重定向视图(比如 modelAndView.setViewName("redirect:welcome");)?

将方法移至单独的 class 并向该 class 添加 @ControllerAdvice 注释。这样 class 中的所有模型属性将应用于应用程序中的所有控制器。

如果您想限制模型属性可用的控制器集,您可以在 @ControllerAdvice 注释中指定仅应增强特定包中的控制器或具有特定注释或实现特定接口的控制器。