【问题标题】:How to handle exception in service layer如何处理服务层的异常
【发布时间】:2022-10-13 09:17:59
【问题描述】:

Springboot 提供了@ControllerAdvice 来处理控制器中的异常。

但是在服务层,没有这样的注解。

我已经了解了 spring-aop 使用 @AfterThrowing 跟踪异常,但 @AfterThrowing 无法捕获异常。

另一种解决方案是使用@Around 捕获所有异常,但是只记录异常有点浪费。

那么,如何优雅地处理服务层的异常呢?

【问题讨论】:

  • 欢迎来到 SO。您在这里有些自相矛盾:您只想记录异常,然后@AfterThrowing 很好。或者你想捕获和处理异常,那么你需要@Around。也许我不明白你的问题,因为你不按规则玩,询问具体代码的问题,理想情况下应该是MCVE(请阅读那篇文章)。

标签: exception aop aspectj


【解决方案1】:

一般的想法是让异常冒泡到控制器,在那里它们可以由带有@ControllerAdvice@RestControllerAdvice 注释的组件处理。

为了实现这一点,您必须在需要时在应用程序中抛出未经检查的异常,即如果业务验证失败。这也意味着您必须捕获任何可能由第三方依赖项抛出的已检查异常,并将它们作为未检查异常重新抛出您的应用程序,即臭名昭著的IOException 及其数十个子变体。

除了上述之外,通常不需要处理@Service@Repository 层中的异常。也很少有理由为任何与异常处理相关的逻辑引入方面。

【讨论】:

    猜你喜欢
    • 2015-06-06
    • 2020-01-07
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    相关资源
    最近更新 更多