我一直在寻找一种方法,只为特定网址路径模式或一组控制器调用@ControllerAdvice
。所以,我发现我可以创建自定义ExceptionHandlerExceptionResolver
并通过setMappedHandlerClasses()
将其分配给自定义控制器。问题是,还有一个默认的ExceptionHandlerExceptionResolver,它也会获取我的@ControllerAdvice
。所以我最终得到了两个ExceptionHandlerExceptionResolver
,它们都有@ControllerAdvice
中定义的处理程序 - 带注释的类。因此,虽然我的自定义ExceptionHandlerExceptionResolver
未在所有bean上调用,但默认情况下会调用。{可能解决方案是删除@ControllerAdvice
并在自定义ResponseEntityExceptionHandler
内手动分配自定义ExceptionHandlerExceptionResolver
。我尝试了最后一种方式,但似乎我必须覆盖ExceptionHandlerExceptionResolver
中的许多方法,最后代码看起来非常不干净。那么,有没有办法以不同的方式实现它,或者可能使用自定义处理程序清理器实现ExceptionHandlerExceptionResolver
?
答案 0 :(得分:1)
将Exception处理方法放在Controller类中,并使用@ExceptionHandler
注释该方法。所以这个处理程序只能由这个控制器使用。 - 当然要删除@ControllerAdvice
内容。
答案 1 :(得分:1)
正如Ralph所提到的 - 从Spring 4开始(现在有一个稳定版本)ControlerAdvice可以限制为具有指定注释的Controler。看看:
http://blog.codeleak.pl/2013/11/controlleradvice-improvements-in-spring.html
(本文的后半部分)了解更多详情。