Java SPRING启动-使用@ControllerAdvice处理HttpClientErrorException
我有一个SpringBootJava应用程序。有一个服务类抛出“401 Unauthorized”HttpClientErrorException,因为应用程序中使用的访问令牌已过期。我希望全局处理我已使用@ControllerAdvice注释的此异常。 错误是: 原因:org.springframework.web.client.httpclienterror异常:401未经授权 课程为:Java SPRING启动-使用@ControllerAdvice处理HttpClientErrorException,java,spring-boot,Java,Spring Boot,我有一个SpringBootJava应用程序。有一个服务类抛出“401 Unauthorized”HttpClientErrorException,因为应用程序中使用的访问令牌已过期。我希望全局处理我已使用@ControllerAdvice注释的此异常。 错误是: 原因:org.springframework.web.client.httpclienterror异常:401未经授权 课程为: @Slf4j @EnableWebMvc @ControllerAdvice(basePackages
@Slf4j
@EnableWebMvc
@ControllerAdvice(basePackages = Service.class)
public class HttpClientErrorHandler{
@ExceptionHandler(HttpClientErrorException.class)
@ResponseStatus(HttpStatus.UNAUTHORIZED)
public String errorHandle(HttpClientErrorException e) {
log.error("log HttpClientErrorException: ", e);
return "HttpClientErrorException_message";
}
}
因为异常是在服务类中引起的,所以我在basePackages中特别提到了它。程序的整个配置在application.yml文件中指定。我没有使用xml配置。我不明白为什么@ControllerAdvice注释不起作用。程序仍然抛出异常。有人能解释一下吗 @ControllerAdvice(basePackages=Service.class)
异常被冒泡到@Controller
类,并且@ControllerAdvice
应该应用到Controller,因此您应该将basePackageClasses
设置到您的控制器包,而不是服务包
默认情况下,
@ControllerAdvice
应用于所有控制器,因此您可以删除basePackageClasses
,除非您想缩小控制器的范围
尝试在@ControllerAdvice
下面添加@Order(有序。最高优先级)
我们添加它是为了获得比Spring默认的DefaultHandlerExceptionResolver
更高的优先级。要了解更多关于我们为什么添加它的信息,请阅读。
也不需要提供基本包,它将默认地考虑所有包。
要处理任何其他类型的异常,您可以在已编写的HttpClientErrorException的现有异常处理程序下面包含
@ExceptionHandler(Exception.class)
public Strring handleAnyExceptions(Exception ex) {
return "your message";
}
希望有帮助 我尝试了您的解决方案,但它仍然无法处理异常。好的,为什么在
HttpClientErrorHandler
中需要@Slf4j@EnableWebMvc?发生异常时,请尝试删除这些设置并尝试将调试断点放置在HttpClientErrorHandler
中。尝试并检查它是否有帮助。是的,我理解你想说的话,并按照你的建议进行了必要的更改,但它仍然没有处理异常:(