package zw.qantra.tm.exceptions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.client.ClientHttpResponse; import org.springframework.stereotype.Component; import org.springframework.web.client.ResponseErrorHandler; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.stream.Collectors; @Component public class RestTemplateResponseErrorHandler implements ResponseErrorHandler { private Logger logger = LoggerFactory.getLogger(this.getClass().toString()); @Override public boolean hasError(ClientHttpResponse httpResponse) throws IOException { return ( httpResponse.getStatusCode().is5xxServerError() || httpResponse.getStatusCode().is4xxClientError()); } @Override public void handleError(ClientHttpResponse httpResponse) throws IOException { logger.info("Rest error code: " + httpResponse.getStatusCode()); if (httpResponse.getStatusCode() .is5xxServerError()) { // handle SERVER_ERROR logger.info("Server Error"); } else if (httpResponse.getStatusCode().is4xxClientError()) { // handle CLIENT_ERROR logger.info("Client Error"); BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getBody())); String httpBodyResponse = reader.lines().collect(Collectors.joining("")); throw new RestException(httpBodyResponse, "Client Error: " + httpResponse.getStatusCode()); } } }