尽管服务器返回了Error-404 JSON,但响应实体为空

时间:2016-05-02 14:08:14

标签: java json spring jackson

我使用Spring REST来处理我的请求。 这是我的代码示例:

RestTemplate restTemplate = new RestTemplate();
HttpEntity entity = new HttpEntity(headers);
ResponseEntity<String> responseEntity = null;
        try {
            responseEntity = restTemplate.exchange(apiAddress + "action?uniqueId=" + id, HttpMethod.GET, entity, String.class);

        }catch (RestClientException ex) {
            System.out.println(responseEntity.toString());
            String errorMessage = ex.getMessage();
        }

当我获得200状态和带有返回值的JSON时,一切正常。 问题在于,例如,404 JSON。 在调试过程中,我发现当404发生时,responseEntity仍为空,因此我无法获取错误代码。此外,我无法从服务器获得JSON回复,我知道它正在发送。

我尝试了HTTP Requester,它可以正常处理200个响应 - 给我请求的数据和404响应 - 给我一个带有错误描述的JSON。

最诚挚的问候, 卡罗尔

1 个答案:

答案 0 :(得分:0)

我已经设法弄清楚发生了什么。 我希望它可以帮助别人:

我已实施ResponseErrorHandler

public class VariousErrorsResponseHandler implements ResponseErrorHandler {
@Override
public boolean hasError(ClientHttpResponse clientHttpResponse) throws IOException {
    if(clientHttpResponse.getStatusCode() == HttpStatus.NOT_FOUND || clientHttpResponse.getStatusCode() == HttpStatus.UNAUTHORIZED) return false;
    else return true;
}

@Override
public void handleError(ClientHttpResponse clientHttpResponse) throws IOException {
    System.err.println(clientHttpResponse.getStatusCode() + "\n" + clientHttpResponse.getStatusText());
}
}

然后将其设置为restTemplate的错误处理程序:

restTemplate.setErrorHandler(new VariousErrorsResponseHandler());

完成了:)