我有一个Spring应用程序,在这个应用程序中,我们很少调用服务来获取数据。控制器和服务层之间有一个数据层。
Controller (Request-Mapping) -> Data Layer -> Service Layer如果我们没有从底层服务获得数据,我们打算抛出一个异常。我的问题是关于在此采用的最佳做法:
具体来说,将控制器标记为“抛出CustomException”是一件好事吗?
发布于 2016-09-17 17:09:35
与抛出Controller处理程序方法异常的观点相反,我确实建议这样做。原因如下:
也就是说,这并不意味着您应该在方法签名中“抛出异常”。在分层体系结构中,像控制器这样的高层对象不能期望低级别的异常(例如来自JDBC驱动程序的异常),因为它会违反封装。每个层应该有单独的异常层次结构,它具有特定于该层的语义,并且应该有异常转换(通常通过包装完成)。例如,存储库中的ConstraintViolationException可能导致服务中的InvalidServiceRequestException,并由异常处理程序转换为HTTP400。
发布于 2016-06-24 05:25:53
在可能的情况下,您可以使用@ResponseStatus、@ExceptionHandler、@ControllerAdvice注释在控制器方法中显式地处理异常。有关更多细节,请参阅:弹簧中的异常处理。
https://softwareengineering.stackexchange.com/questions/323091
复制相似问题