我有一个包装类,它通过代理客户端 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/