在我的项目中,我有一个域层,基本上就是POJO,还有一个位于域层之上的Spring控制器/服务层。我还有一个位于服务和域之间的AOP层。
我的域层抛出业务异常,现在正在服务层处理这些异常。
然而,我想要更改它,以便域层抛出的异常将在AOP层中处理。AOP层将发出某种类型的错误响应,并将其发送回Spring控制器/Web服务层。
我可以创建一个IBizResponse并创建它的两个子类/接口,可能是一个SuccessResponse和一个ErrorResponse,然后让我的域层方法返回IBizResponse。但是,我想不出如何让AOP将ErrorResponse对象返回给服务层。
4条答案
按热度按时间iih3973s1#
请参阅https://docs.spring.io/spring/docs/4.1.0.RELEASE/spring-framework-reference/htmlsingle/#aop-introduction-defn的抛出后建议部分
抛出建议后,当匹配的方法执行通过抛出异常退出时运行。它是使用@AfterThrowing注解声明的:
示例
kx5bkwkv2#
我遇到了相同的场景,在任何异常处理的情况下,我必须返回错误响应DTO。在@Aspect类内部,
为异常处理定义了另一个类,如下所示:
调整了代码,因为我不能分享实际的代码。希望我把概念讲清楚了。
rqmkfv5c3#
考虑到com.sc.bs.imp.*是业务/域层的包,并在AOP层使用@Above注解拦截它。代码片段:
xwbd5t1u4#
考虑使用@ExceptionHandler和@ControllerAdiance的全局异常处理程序
创建一个CustomExceptionHandler。在类级别添加@ControllerAdtendant注解。并为您想要处理的每个异常添加@ExceptionHandler注解。记住@ExceptionHandler的顺序很重要--一旦它与一个异常匹配,它就不会继续检查后面的处理程序。
我的其他类以供参考和测试