2017-07-24 84 views
1

我開發了一個Spring Boot項目,我使用ExceptionHandler以@RestControllerAdvice註釋捕獲所有異常。 服務器端沒有問題來捕獲異常。 但是,我不知道如何在客戶端應用程序中捕獲這些異常。來自客戶端的Springboot ExceptionHandler catch

請問您能幫我嗎?

+0

你在使用什麼客戶端? RestTemplate? – Gondy

+0

是的RestTemplate – tester

+0

然後在使用RestTemplate時只使用try-catch塊。捕獲RestClientException並根據需要處理它。 – Gondy

回答

1

如果你使用spring-webRestTemplate,這裏有一個例子:

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作爲父母,如果確實需要的話也可以抓住它。

+0

非常感謝您的幫助,它解決了我的問題。 – tester

1

在客戶端,大概是使用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,如果它不屬於異常處理塊,則使用響應主體來了解異常的性質。

+0

謝謝毛刺,你的解決方案節省我的一天。 – tester