How do I retrieve HTTP status code and response body when an RestClientException is thrown?

java, resttemplate

Solution

Instead of catching `RestClientException`, catch the special `HttpClientErrorException`.

Here's an example:

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` provides `getStatusCode` and `getResponseBodyAsByteArray` to get the status code and body, respectively.

Problem

The methods of `RestTemplate` such as `postForEntity()` throw `RestClientException`. I would like to extract the HTTP status code and response body from that exception object in the catch block. How can I do that?

Original source