这个场景就像我写了一个基于MVC的应用程序: 控制器 - 服务 - DAO层。现在我在DAO层中遇到了一个异常,我想在表示层中处理该异常,这样服务层就不需要改变了。
因为通过使用常规try/catch
或throws
,它必须通过我不想要的服务层。
有没有更好的方法来实现它?
class Controller{
method1(){}
}
class service(){
method1Serice(){}
}
class DAO(){
method1DAO(){
// exception occurs here
}
答案 0 :(得分:0)
您可以让DAO
类抛出未经检查的异常。 (RuntimeException
的任何子类都可以)。您可以创建自己的自定义例外或使用任何预定义的例外。只需确保Service
无法抓住Throwable
,您就可以Controller
抓住它。
答案 1 :(得分:0)
您可以从RuntimeException扩展您的异常类,以便编译器不会抱怨异常处理。然后,您可以在表示层中捕获该异常。
答案 2 :(得分:0)
也许您正在寻找Controller Based Exception Handling
,您可以在Exception Handling in Spring MVC和Error Handling for REST with Spring中查看这些内容。
@ExceptionHandler(YourException.class)
public String handleException(){
logger.info(message);
return "database_error";
}
实际上我建议您在Service-Layer
中正确处理异常并正确封装该异常以通过Controller-Layer
返回给前端用户。
通常情况下,checked exceptions
会携带一些有意义的消息,这些消息可用于执行恢复或让调用者明确地正确处理它。尽量不要直接避免它,因为它在那里。
答案 3 :(得分:-1)
据我了解,数据访问对象(DAO)旨在用于在服务器和客户端之间传输数据。我假设客户端是您所指的表示层。换句话说,最终用户与之交互的部分。因此,DAO应仅包含字段和访问器方法,即它不应包含逻辑。因此,它不应包含可能抛出异常的方法。所以我建议重新设计你的应用程序。否则,也许你可以提供更详细的代码?