Olá. Estou tentando fazer a sobrescrita da interface ResponseErrorHandler para poder retornar a request inteira (status code, body etc.) em caso de qualquer resposta que não 2xx.
Percebi que o default do Spring (RestTemplate) retorna uma exception em caso de resposta diferente de 2xx. Isso não me ajuda muito.
Seguindo alguns tutoriais, encontrei o seguinte código:
@Component
public class LoginErrorHandler
implements ResponseErrorHandler {
@Override
public boolean hasError(ClientHttpResponse httpResponse)
throws IOException {
return (
httpResponse.getStatusCode().series() == CLIENT_ERROR
|| httpResponse.getStatusCode().series() == SERVER_ERROR);
}
@Override
public void handleError(ClientHttpResponse httpResponse)
throws IOException {
if (httpResponse.getStatusCode()
.series() == SERVER_ERROR) {
// handle SERVER_ERROR
} else if (httpResponse.getStatusCode()
.series() == CLIENT_ERROR) {
// handle CLIENT_ERROR
}
}
(Referência deste código aqui)
Mas não entendi como vou conseguir retornar um ResponseEntity sem alterar o retorno do método (que não posso por estar fazendo Override).
Implementação:
//Objeto da requisição
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
RestTemplate restTemplate = new RestTemplate();
restTemplate.setErrorHandler(new LoginErrorHandler());
//Disparando Request
return restTemplate.postForEntity(url, request, String.class);
Eu retorno a ResponseEntity completa (assim, ele disponibiliza o body, o status code e tudo mais no endpoint)
Gostaria de saber como vocês fazem. Me falaram “bota tudo dentro de um try/catch e boa”, mas isso me parece gambiarra.
Um abraço!