gpt4 book ai didi

spring-mvc - 如何使用@ControllerAdvice @ModelAttribute 定位特定的处理程序?

转载 作者:行者123 更新时间:2023-12-03 19:55:19 24 4
gpt4 key购买 nike

我想在系统关闭前 5 分钟在特定页面上显示警告消息。我没有将它手动添加到每个页面中,而是创建了一个 @ControllerAdvice 类,该类带有一个将消息添加到 Model 参数的 @ModelAttribute 方法,但是根据我阅读文档和 SO 的理解以及一些初始测试,这个模型属性将被添加到带有@RequestMapping 的每个方法。

我意识到我可以重构我的代码,以便目标方法都在一个 Controller 中,并将 @ControllerAdvice 限制在那个 Controller 中,但我最终会在该 Controller 中收集一组其他不相关的方法,这会使整体结构变得困惑我的 Controller 。

那么,有没有办法指示@ModelAttribute 应用于多个 Controller 中的哪些特定方法?自定义注释会是一个解决方案吗(不确定它是如何工作的)?如果可能的话,我想通过注释来做到这一点。

编辑:

@ControllerAdvice 代码非常基础:

@ControllerAdvice
public class GlobalModelController {

private final Logger logger = LoggerFactory.getLogger(getClass());

@Autowired
private MaintenanceInterceptor maintInterceptor;

@ModelAttribute()
public void globalAttributes(Model model, Locale locale) {
if (maintInterceptor.isMaintenanceWindowSet() && !maintInterceptor.isMaintenanceInEffect()) {
String msg = maintInterceptor.getImminentMaint(locale);
model.addAttribute("warningMaint", msg);
logger.debug("maint msg= " + msg);
}
}
}

最佳答案

通过使用 @ControllerAdvice 的值之一,可以将 Controller 建议限制为某些 Controller (不是方法)。注释,例如

@ControllerAdvice(assignableTypes = {MyController1.class, MyController2.class})

如果您需要在方法级别执行此操作,我建议您查看 Interceptors .

关于spring-mvc - 如何使用@ControllerAdvice @ModelAttribute 定位特定的处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36041509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com