我开发了一个Spring Boot项目,并使用ExceptionHandler来捕获@RestControllerAdvice
注释的所有异常。
服务器端没有问题来捕获异常。
但是,我不知道如何在客户端应用程序中捕获这些异常。
你能帮我吗?
答案 0 :(得分: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
,如果不是,则将其置于异常处理块中,使用响应主体来理解异常的性质。
答案 1 :(得分:1)
如果您正在使用spring-web&#39; 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
作为父级,如果确实需要,您也可以抓住它。