RestTemplate的方法(例如postForEntity())抛出RestClientException。我想从catch块中的异常对象中提取HTTP状态代码和响应主体。我怎样才能做到这一点?

最佳答案

代替捕获RestClientException,而是捕获特殊的HttpClientErrorException

这是一个例子:

try {
    Link dataCenterLink = serviceInstance.getLink("dataCenter");
    String dataCenterUrl = dataCenterLink.getHref();
    DataCenterResource dataCenter =
        restTemplate.getForObject(dataCenterUrl, DataCenterResource.class);
    serviceInstance.setDataCenter(dataCenter);
} catch (HttpClientErrorException e) {
    HttpStatus status = e.getStatusCode();
    if (status != HttpStatus.NOT_FOUND) { throw e; }
}

HttpClientErrorException 提供 getStatusCode getResponseBodyAsByteArray 分别获取状态码和正文。

09-05 18:51