如何处理存储库层中的Spring数据异常

时间:2012-11-02 17:00:12

标签: spring exception-handling

我正在使用Spring编写REST应用程序。它分为3层,控制器,服务和存储库。

存储库层使用Spring数据和MongoDb。 MongoDb的例外转换为Spring Data例外。

使用@ExceptionHandler注释我试图在存储库层中捕获这些异常。这没用。使用@ExceptionHandler捕获异常的唯一方法是将代码放在控制器层中。

我有没有办法在不使用try / catch块的情况下捕获和处理存储库层中的异常。

1 个答案:

答案 0 :(得分:4)

可以使用Spring AOP并为所有DAO方法创建@Around建议,如下所示。

但是我仍然想了解你计划在catch块中做什么。您是否计划使用不同的逻辑来处理不同类型的数据访问异常?如果您没有任何特定逻辑,那么让异常传播到控制器层是有意义的。

第一个选项

以下是一个示例 -

    @Aspect
public class DaoExceptionHandlerAdvice {
    @Around("execution( * com.xyz.daos.*.*(..))")
    public Object invokeService(ProceedingJoinPoint pjp) throws Throwable{
        MethodSignature methodSignature = (MethodSignature)pjp.getSignature();
        Object returnValue = null;
        try {
            returnValue = pjp.proceed();
        } 
        catch(Exception e){
            // handle the exception 
        }
        finally{
        }
        return returnValue;
    }
}

在应用程序上下文文件中添加以下代码段

<aop:aspectj-autoproxy />    
<bean id="daoExceptionHandler" class="com.xyz.advice.DaoExceptionHandlerAdvice"  ></bean>

查看以下链接了解详情 - Spring AOP

第二个选项

我没试过这个,但是你可能更容易使用异常翻译器。您可以扩展HibernateExceptionTranslator并在那里拥有自己的逻辑。

请点击此链接了解详情 - Exception Translation