Rest 来自客户端的Springboot ExceptionHandler捕获

Rest 来自客户端的Springboot ExceptionHandler捕获,rest,spring-boot,exception-handling,Rest,Spring Boot,Exception Handling,我开发了一个Spring启动项目,并使用ExceptionHandler捕获带有@RestControllerAdvice注释的所有异常。 服务器端捕获异常没有问题。 然而,我不知道如何在客户端应用程序中捕获这些异常 您能帮助我吗?在客户端,您可能正在使用HTTP客户端(例如Spring的RestTemplate或Apache Commons'HttpClient)。也许是这样的: ResponseEntity<String> response = restTemplate.getF

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


您能帮助我吗?

在客户端,您可能正在使用HTTP客户端(例如Spring的
RestTemplate
或Apache Commons'
HttpClient
)。也许是这样的:

ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
因此,您通过
RestControllerAdvice
提供的任何状态代码和响应正文都可以从响应中读取

典型的方法是评估HttpStatus是否为
200
,如果不是,则落入异常处理块,使用响应体了解异常的性质。

如果使用的是's
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());
}
试试看{
ResponseEntity response=new restemplate().getForEntity(url,String.class);
System.out.println(“响应:+Response.getBody());
}捕获(HttpStatusCodeException){
System.err.println(“查询问题”+url+”+
“状态代码”+e.getStatusCode()+
“和错误消息”+e.getResponseBodyAsString());
}
请注意,默认情况下,
restemplate
会为错误状态代码引发异常,因此您需要捕获
HttpStatusCodeException


虽然并非所有错误都是
HttpStatusCodeException
,但它们都以
RestClientException
为父级,如果确实需要,您也可以捕获它。

您使用的是什么客户端?RestTemplate?是的,它是RestTemplate,然后在使用RestTemplate时使用try-catch块。捕获RestClientException并根据需要进行处理。谢谢Gondy,它会起作用:)谢谢Glitch,您的解决方案拯救了我的一天。
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());
}