抛出RestClientException时如何检索HTTP状态代码和响应正文?

Vat*_*nak 24 java resttemplate

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

Wil*_*ler 42

而不是捕捉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; }
}
Run Code Online (Sandbox Code Playgroud)

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

  • 如果你捕捉到 `HttpStatusCodeException`,你就可以访问方法 `getResponseBodyAsString()`。 (4认同)
  • 我已经编辑了你的答案,添加了一些更有用的细节,并使这个问题/答案作为规范更有用. (3认同)
  • 这个答案我错过了什么?如果您正在调用返回 RestClientException 的方法,您不能只是神奇地将其转换为 HttpClientErrorException 对吗? (3认同)

Emm*_*osu 5

RestClientResponseException而是抓住。它更通用。

来自文档:包含实际 HTTP 响应数据的异常的通用基类。