我開發了一個Spring Boot項目,我使用ExceptionHandler以@RestControllerAdvice
註釋捕獲所有異常。 服務器端沒有問題來捕獲異常。 但是,我不知道如何在客戶端應用程序中捕獲這些異常。來自客戶端的Springboot ExceptionHandler catch
請問您能幫我嗎?
我開發了一個Spring Boot項目,我使用ExceptionHandler以@RestControllerAdvice
註釋捕獲所有異常。 服務器端沒有問題來捕獲異常。 但是,我不知道如何在客戶端應用程序中捕獲這些異常。來自客戶端的Springboot ExceptionHandler catch
請問您能幫我嗎?
如果你使用spring-web的RestTemplate
,這裏有一個例子:
try {
ResponseEntity<String> response = new RestTemplate().getForEntity(url, String.class);
System.out.println("Response: " + response.getBody());
} catch (HttpStatusCodeException e) {
System.err.println("Problem querying " + url + ". " +
"Status code " + e.getStatusCode() +
" and error message " + e.getResponseBodyAsString());
}
注意RestTemplate
默認會拋出一個異常錯誤狀態代碼,所以你需要捕捉HttpStatusCodeException
。
雖然並不是所有的錯誤都是HttpStatusCodeException
,但它們全都有RestClientException
作爲父母,如果確實需要的話也可以抓住它。
非常感謝您的幫助,它解決了我的問題。 – tester
在客戶端,大概是使用HTTP客戶端(例如Spring的RestTemplate
或Apache Commons的HttpClient
)。事情是這樣的,也許:
ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
鑑於此代碼,HTTP狀態和響應主體可用如下:
HttpStatus httpStatus = response.getStatusCode();
String responseBody = response.getBody();
所以,無論狀態碼和響應主體您通過RestControllerAdvice
提供能被讀出來的迴應。
一個典型的方法是評估HttpStatus是否是200
,如果它不屬於異常處理塊,則使用響應主體來了解異常的性質。
謝謝毛刺,你的解決方案節省我的一天。 – tester
你在使用什麼客戶端? RestTemplate? – Gondy
是的RestTemplate – tester
然後在使用RestTemplate時只使用try-catch塊。捕獲RestClientException並根據需要處理它。 – Gondy