我正在处理我的DAO,不知道处理异常的最佳方法是什么。在使用.persist()时,可以发出三个异常: EntityExistsException / IllegalArgumentException / TransactionRequiredException。
我只是想知道捕获和抛出异常的最佳方法是什么(我想在更高的级别上处理它)。
我应该捕获并抛出一个简单的异常,还是单独捕获上面的异常更有效?
第一个方法是捕获异常并抛出它:
public void addAccount(final Account accountToAdd) throws AccountJpaException {
try {
em.persist(accountToAdd);
} catch (Exception e) {
throw new AccountJpaException(e);
}
}
}第二种方法:我把它们分别抓起来。
public void addAccount(final Account accountToAdd) throws AccountJpaException, AccountExistsException {
try {
em.persist(accountToAdd);
} catch (EntityExistsException e) {
throw new AccountExistsException(e);
}catch(IllegalArgumentException e){
throw new AccountJpaException(e);
}catch(TransactionRequiredException e){
throw new AccountJpaException(e);
}
}
}谢谢你的建议!
发布于 2017-02-17 19:25:45
大多数N层应用程序在服务类上指定一些事务边界.在这里捕获这些类型的异常并在这里抛出特定于用例的异常将更合适,而不是将此逻辑处理推到DAO。
考虑一下,两个不同的服务类实现都使用了DAO方法。可以想象,它们解决了您的业务领域中的不同问题,因此要抛出的异常应该更特定于域。
如果我们采用第二种方法,您将捕获这些异常,并从DAO中抛出一些超级泛型异常来捕获这些异常,并在服务级别重新抛出一个更细粒度的异常,这是过分的。
我的经验法则是在服务/域级别捕捉这些类型的情况,从那里传播特定领域的异常,并根据需要在控制器中处理这些异常,可能是通过一些特定的错误处理程序来显示基于异常类型的适当的网页视图,等等。
https://stackoverflow.com/questions/42304428
复制相似问题