java - SOAP 代理客户端的 Spring Boot 通用异常处理程序

标签 java spring spring-boot spring-mvc

我有一个包装类,它通过代理客户端 jar 调用 Web 服务。我发现自己为这个客户端的不同方法编写了相同的 try\catch 。我看到有一种方法可以为 Controller 类创建通用异常处理程序,但这不是那样。有没有一种方法可以让 spring 或其他方法编写一次 try\catch 并为每个客户端调用重用它?

示例:

@org.springframework.stereotype.Service
public class proxyClient{

  public int method a(){
     try { 
        return client.a()
     }
     catch(Exception1 e){}
     catch(Exception2 e){}
     return null;
  }
  public int method b(){
     try { 
        return client.b()
     }
     catch(Exception1 e){}
     catch(Exception2 e){}
     return null;
  } 
  public int method c(){
     try { 
        return client.c()
     }
     catch(Exception1 e){}
     catch(Exception2 e){}
     return null;
  }
}

我希望能够有一些东西为我处理这些异常,这样我就可以减少代码重复,但我只想为这个类完成它。

最佳答案

最常见和最奇特的方法是使用AOP(面向方面编程),因为异常处理是一个横切关注点,该范例的目标是来增强。

您可以创建一个切面Advice来处理您的包(此处称为some.package.service)下的任何服务(假设还有其他服务)抛出的异常> 因为您还没有提供完整的类(class)内容):

package some.package.aop;

import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.context.annotation.Configuration;

@Configuration
@Aspect
public class ExceptionHandlerPointcut {

    @AfterThrowing(pointcut = "execution(* some.package.service.*.*(..))", throwing = "ex")
    public void handleException(Exception ex) {
        // your common exception management code
    }

}

确保使用 @EnableAspectJAutoProxy 注释您的主配置(或 Spring Boot 应用程序)类,以启用 @Aspect 类发现。

关于java - SOAP 代理客户端的 Spring Boot 通用异常处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59993012/

相关文章:

java - 如何让 Spring 打印出它通过组件扫描获取的 bean 定义?

java - 如何将 EJB 注入(inject) Spring

java - Spring 4.2+ : How to reference a Spring bean instance from inside an @EventListener condition expression

postgresql - 为什么我的 Kubernetes 服务运行在不同的子网上?

angular - 如何构建结合了 Angular 和Spring Boot应用程序的Docker镜像?

java - 带有 H2 文件数据库的 Spring Boot 应用程序

java - JPA异常: Object: is not a known entity type

java - 如何在for循环中创建新对象?

java - 从 Java 中的输入文件数据创建的数组中创建格式化表

java - 每次编译一个排列?