【问题标题】:Exception Handling component for endpoints端点的异常处理组件
【发布时间】:2014-04-04 14:57:34
【问题描述】:

我正在使用 Spring。 我的应用程序中有几个端点。基本上,每个端点都返回一个不同的对象。 该应用程序由几个层组成。 无论发生在哪里,将错误传播给端点的调用者对我们来说都很重要。 我们的做法是在发生错误的地方抛出异常,并在端点中捕捉到,端点根据异常中的信息改变响应的状态码。我们赶上异常,因为我们不想向调用者抛出soap错误

我们已经到了架构中的一个点,我们不希望端点管理异常。我们认为 t 应该在某种拦截器或 AOP 中完成。 重要的是,在那个“外部异常处理组件”中,我可以完全获取异常及其属性,并基于此,无论调用什么端点,获取端点的返回类型对象并通过填充一些适当的来返回它基于异常的字段,可能是通过一些 java 反射

我的第一种方法是使用 SOAP 拦截器,但我认为根据我的需要它是有限的。我正在研究 AOP ,有什么想法吗?

【问题讨论】:

    标签: java spring interceptor spring-aop endpoint


    【解决方案1】:

    在我看来,这是 AOP 的完美场景。但问题出在哪里? :) 您可以在服务方法(不是端点)上创建 @Around 类型的方面,然后在 try catch 块中调用 joinPoint.proceed() 。捕获异常并返回你想要的:P 通过使用 AOP API,你可以检查应该是什么返回类型,参数.. 基本上你需要的一切:)

    【讨论】:

    • 非常感谢!让我问你点别的……是否有可能有两个或@Around 方面与相同的方法相匹配?执行顺序是什么?我可以得到方法从jointPoint返回的对象类型吗?
    • 是的。你有 @Order 注释可以做到这一点。但我从未检查过它是如何工作的。你必须自己检查:)
    • 谢谢!获取该方法从jointPoint返回的对象类型怎么样?
    • MethodSignature 签名 = (MethodSignature) joinPoint.getSignature() 签名 .getReturnType;类似的东西。我现在没有办法检查。
    • 这里有一个非常相似的案例:stackoverflow.com/questions/21275819/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 2011-01-14
    • 1970-01-01
    • 2021-04-05
    • 2021-09-16
    • 2021-07-16
    • 1970-01-01
    相关资源
    最近更新 更多