【发布时间】:2015-04-19 14:43:04
【问题描述】:
我正在开发 Spring 3.2 和 Hibernate 3.6,任何人都可以解释如何在 Sping MVC 和 Hibernate 中处理异常...我只是分享示例代码。
控制器层
public Integer saveEployee(HttpServletRequest req, HttpServletResponse res){
Employee empObj = new Employee();
empObj.setName(req.getParameter("empName"));
......................
......................
Integer empId = materService.saveEmployee(empObj);
return empId;
}
服务层
public Integer saveEmployee(Employee empObj){
return masterDao.saveEmployee(empObj);
}
DAO 层
public Integer saveEmployee(Employee empObj){
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
Integer empId = session.save(empObj);
tx.commit();
session.close();
return empId;
}
-
现在假设在保存 empObj 时在 DAO 层发生了任何异常,例如 d/b 关闭或连接失败或发生任何其他类型的休眠异常,例如
ConstraintViolationException或IntegrityConstraintViolationException等。 如果有可能在控制器层处理
NullPointerException或任何用户定义的异常等 java 异常。
那么最佳实践是什么?或者如何在Controller、Service和DAO层同时处理异常。
【问题讨论】:
-
您可以使用@ControllerAdvice 处理应用程序中任何层抛出的异常。我的意思是,如果在 DAO 或服务层发生任何异常,它将被抛出到 Controller。您的 ControllerAdvice 将处理来自每个控制器的异常。可以参考这篇文章spring.io/blog/2013/11/01/exception-handling-in-spring-mvc
-
@thoitbk 是这项工作,即使我在 DAO 层发生任何类型的休眠异常,假设 ConstraintViolationException ?
-
当然。您可以根据需要处理任何类型的异常。只需在 ControllerAdvice 类中创建每种方法来处理每种类型的异常。这些方法用
@ExceptionHandler(value={ConstraintViolationException.class, IntegrityConstraintViolationException.class,...})注释
标签: java spring hibernate exception