寻找一种方法将@ControllerAdvice分配给特定的url路径模式或控制器

时间:2013-11-20 14:30:26

标签: spring

我一直在寻找一种方法,只为特定网址路径模式或一组控制器调用@ControllerAdvice。所以,我发现我可以创建自定义ExceptionHandlerExceptionResolver并通过setMappedHandlerClasses()将其分配给自定义控制器。问题是,还有一个默认的ExceptionHandlerExceptionResolver,它也会获取我的@ControllerAdvice。所以我最终得到了两个ExceptionHandlerExceptionResolver,它们都有@ControllerAdvice中定义的处理程序 - 带注释的类。因此,虽然我的自定义ExceptionHandlerExceptionResolver未在所有bean上调用,但默认情况下会调用。{可能解决方案是删除@ControllerAdvice并在自定义ResponseEntityExceptionHandler内手动分配自定义ExceptionHandlerExceptionResolver。我尝试了最后一种方式,但似乎我必须覆盖ExceptionHandlerExceptionResolver中的许多方法,最后代码看起来非常不干净。那么,有没有办法以不同的方式实现它,或者可能使用自定义处理程序清理器实现ExceptionHandlerExceptionResolver

2 个答案:

答案 0 :(得分:1)

将Exception处理方法放在Controller类中,并使用@ExceptionHandler注释该方法。所以这个处理程序只能由这个控制器使用。 - 当然要删除@ControllerAdvice内容。

答案 1 :(得分:1)

正如Ralph所提到的 - 从Spring 4开始(现在有一个稳定版本)ControlerAdvice可以限制为具有指定注释的Controler。看看:

http://blog.codeleak.pl/2013/11/controlleradvice-improvements-in-spring.html

(本文的后半部分)了解更多详情。