java - 您如何设计一个不全是 try/catch block 的服务层?

标签 java spring spring-mvc exception-handling

在设计 SpringMVC 应用程序时,@ExceptionHandler 注释由我们在 REST 层中使用。这通过将异常处理卸载到一组半通用处理程序来极大地消除 Controller 方法的困惑。

我们服务的基本架构是这样的:

[REST API] <==> [Application Services] <==> [Data Layer]

我相信 REST 层 Controller 不应该直接处理数据层异常,而应该只处理应用程序服务异常。

但是,这意味着我所有的应用程序服务方法基本上必须如下所示:

public DomainObject getSomeDomainObjectById(String id) {
   DomainObject retVal = null;
   try {
      myDomainDao.getSomeDomainObjectById(id);
   } catch (DataLayerExceptionOfSomeSort ex) {
      throw translateToAppropriateServiceException(ex);
   }
   //do some further processing
   return retVal;
}

对我来说,这是很多我不关心的当面异常处理。我还能怎么解决这个问题?有没有一种简单的方法可以在应用服务层实现与 Rest 层相同的功能?

我首先想到的是 AOP。我对此持开放态度,前提是它不会增加很多麻烦并且易于配置。

最佳答案

无论是否使用 Spring,您都应该使用 AOP,并在您的方面完成此类工作(如异常翻译、事务管理等)。

关于java - 您如何设计一个不全是 try/catch block 的服务层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24871683/

相关文章:

java - 使用新的 libgdx gradle 项目找不到 PolygonShape native 方法

java - java中的mysql选择查询

spring - Google 应用引擎与 Spring 框架的兼容性

java - 在 Java EE 6 中,如何以编程方式获取 JAX-RS 端点的 URL?

java - 使用 Java URLConnection 关闭 Cookie

java - Hibernate WHERE 不适用于带有 null 成员的 @Embedded

database - spring hibernate 获取整个数据库的锁

java - SpringBoot 的 @MultipartConfig maxFileSize 没有生效

java - session.get() 无法解析字段、参数

spring-mvc - Spring Security 无效 session 重定向