![](/img/trans.png)
[英]Spring boot: Handle Custom Exceptions using ControllerAdvice for REST
[英]SPRING BOOT - Handle HttpClientErrorException using @ControllerAdvice
我有一個Spring Boot Java應用程序。 由於在應用程序中使用的訪問令牌已過期,因此服務類將引發“ 401未經授權”的HttpClientErrorException。 我想全局處理該異常,為此我已使用@ControllerAdvice批注。 錯誤是:
引起原因:org.springframework.web.client.HttpClientErrorException:401未經授權
該類是:
@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
應該適用於控制器,因此您應該將basePackageClasses
設置為控制器軟件包而不是服務軟件包。
默認情況下, @ControllerAdvice
ControllerAdvice應用於所有Controller,因此您可以刪除basePackageClasses
除非您想縮小控制器的建議范圍。
我也遇到過類似的問題,
嘗試在@ControllerAdvice
添加@Order(Ordered.HIGHEST_PRECEDENCE)
。
我們添加它以獲得優先於Spring的默認DefaultHandlerExceptionResolver
。 要了解更多關於我們為什么添加它的信息,請閱讀此答案 。 同樣也無需提供基本軟件包,默認情況下它將考慮所有軟件包。
要處理任何其他類型的異常,您可以在已經編寫的HttpClientErrorException的現有異常處理程序下面包括它,
@ExceptionHandler(Exception.class)
public Strring handleAnyExceptions(Exception ex) {
return "your message";
}
希望能幫助到你 !
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.