从客户端捕获Springboot ExceptionHandler

时间:2017-07-24 14:16:40

标签: rest spring-boot exception-handling

我开发了一个Spring Boot项目,并使用ExceptionHandler来捕获@RestControllerAdvice注释的所有异常。 服务器端没有问题来捕获异常。 但是,我不知道如何在客户端应用程序中捕获这些异常。

你能帮我吗?

2 个答案:

答案 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作为父级,如果确实需要,您也可以抓住它。