【发布时间】:2021-11-20 23:37:13
【问题描述】:
我目前正在编写一个包含三层(控制器 -> 服务 -> dao)的 spring-mvc (jsp) 项目,我想知道处理来自 dao 调用的预期异常的正确方法是什么(例如,尝试持久化用户已经存在,如果存在,则再次调用注册视图并显示用户已存在的消息),起初我认为在 dao 中捕获异常(例如 DataIntegrityViolationException)并抛出我的任意检查是个好主意异常,所以我可以在控制器中为它做一个异常处理程序,但我担心如果我这样做,那么如果我想稍后创建我的服务方法@Transactional,我可能会发生冲突,因为 spring 不知道如何回滚事务。
如果这是正确的,那么我有两个想法:
-
当我调用服务调用 userService.register(..) 时,在控制器中尝试/捕获 DataAccessException
-
在控制器中使用诸如 userService.findByUsername(username) 之类的东西(它返回一个 Optional),如果它存在,我什至在调用 userService.register(..) 之前通知用户
另外,我们的老师强调遵循 DDD 行为并试图避免在我们的控制器中泄漏业务逻辑,我担心这两种解决方案都会这样做,但我真的不知道如何处理它。
【问题讨论】:
标签: spring spring-mvc exception dao