ams*_*ams 10 spring spring-mvc spring-3
我的spring应用程序中有两种类型的控制器.
API控制器和视图控制器都是同一个Spring调度程序servlet的一部分.Spring 3.2引入了@ControllerAdvice注释,允许全局位置处理异常.
该文档暗示@ControllerAdvice将应用于与Dispatcher Servlet关联的每个控制器.
有没有办法配置哪些控制器@ControllerAdvice适用?
例如,在我的场景中,我想要一个@ControllerAdvice用于我的View控制器并@ControllerAdvice为我的API控制器分开.
更新
我正在使用 spring 4。您可以执行以下 2 个选项之一。
(1)您可以添加您想要的包。(在这些包中你有你想要遵循的控制器@ControllerAdvice)。
前任:
@ControllerAdvice(basePackages={"my.pkg.a", "my.pkg.b"})
Run Code Online (Sandbox Code Playgroud)
(2)可以直接添加你想要的控制器类。
前任:
@ControllerAdvice(basePackageClasses={MyControllerA.class, MyControllerB.class})
Run Code Online (Sandbox Code Playgroud)
对于仍然会发现此问题的人:
从Spring 4开始,ControlerAdvice可以限制为具有指定批注的ControlerAdvice。看一眼:
http://blog.codeleak.pl/2013/11/controlleradvice-improvements-in-spring.html
(本文的后半部分)以获取更多详细信息。
我认为现在这是不可能的。如果你可以让 API 和 View 控制器抛出不同的异常类型,那么你可以定义两个不同的 @ExceptionHandler 并实现你想要的。
// For handling API Exceptions
@ExceptionHandler(APIException.class) // Single API Exception
@ExceptionHandler({APIException.class, ..., ,,,}) // Multiple API Exceptions
// For handling View Exceptions
@ExceptionHandler(ViewException.class) // Single View Exception
@ExceptionHandler({ViewException.class, ..., ...}) // Multiple View Exceptions
Run Code Online (Sandbox Code Playgroud)
您可以使用 aop 将来自 API 的异常转换为标准 APIException。请参阅 Spring 论坛上的此主题。
希望能帮助到你。
| 归档时间: |
|
| 查看次数: |
8790 次 |
| 最近记录: |