Corrections implementation.

This commit is contained in:
jacques 2018-05-23 08:28:37 -04:00
parent 9a04bf2c2c
commit 1aaa12eca6
3 changed files with 36 additions and 50 deletions

View File

@ -1,8 +1,6 @@
package org.baeldung.web.handler; package org.baeldung.web.handler;
import org.baeldung.web.exception.NotFoundException; import org.baeldung.web.exception.NotFoundException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.client.ClientHttpResponse; import org.springframework.http.client.ClientHttpResponse;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -11,13 +9,13 @@ import org.springframework.web.client.ResponseErrorHandler;
import java.io.IOException; import java.io.IOException;
@Component @Component
public class RestTemplateResponseErrorHandler implements ResponseErrorHandler { public class RestTemplateResponseErrorHandler
implements ResponseErrorHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(RestTemplateResponseErrorHandler.class);
@Override @Override
public boolean hasError(ClientHttpResponse httpResponse) throws IOException { public boolean hasError(ClientHttpResponse httpResponse)
throws IOException {
return (httpResponse return (httpResponse
.getStatusCode() .getStatusCode()
.series() == HttpStatus.Series.CLIENT_ERROR || httpResponse .series() == HttpStatus.Series.CLIENT_ERROR || httpResponse
@ -26,28 +24,20 @@ public class RestTemplateResponseErrorHandler implements ResponseErrorHandler {
} }
@Override @Override
public void handleError(ClientHttpResponse httpResponse) throws IOException { public void handleError(ClientHttpResponse httpResponse)
throws IOException {
if (httpResponse if (httpResponse
.getStatusCode() .getStatusCode()
.series() == HttpStatus.Series.SERVER_ERROR) { .series() == HttpStatus.Series.SERVER_ERROR) {
this.handleServerError(httpResponse); //Handle SERVER_ERROR
} else if (httpResponse } else if (httpResponse
.getStatusCode() .getStatusCode()
.series() == HttpStatus.Series.CLIENT_ERROR) { .series() == HttpStatus.Series.CLIENT_ERROR) {
this.handleClientError(httpResponse); //Handle CLIENT_ERROR
}
}
private void handleServerError(ClientHttpResponse httpResponse) {
//Handle Server specific errors
}
private void handleClientError(ClientHttpResponse httpResponse) throws IOException {
//Handle Client specific errors
if (httpResponse.getStatusCode() == HttpStatus.NOT_FOUND) { if (httpResponse.getStatusCode() == HttpStatus.NOT_FOUND) {
//Log details here...
LOGGER.info("Throwing NotFoundException...");
throw new NotFoundException(); throw new NotFoundException();
} }
} }
} }
}

View File

@ -7,17 +7,19 @@ import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
@Service @Service
public class BarConsumerService { public class BarConsumerService {
private RestTemplate restTemplate;
@Autowired RestTemplateBuilder restTemplateBuilder; @Autowired
public BarConsumerService(RestTemplateBuilder restTemplateBuilder) {
public Bar fetchBarById(String barId) {
RestTemplate restTemplate = restTemplateBuilder RestTemplate restTemplate = restTemplateBuilder
.errorHandler(new RestTemplateResponseErrorHandler()) .errorHandler(new RestTemplateResponseErrorHandler())
.build(); .build();
}
public Bar fetchBarById(String barId) {
return restTemplate.getForObject("/bars/4242", Bar.class); return restTemplate.getForObject("/bars/4242", Bar.class);
} }

View File

@ -1,13 +1,10 @@
package org.baeldung.web.handler; package org.baeldung.web.handler;
import org.baeldung.web.dto.Bazz;
import org.baeldung.web.exception.NotFoundException; import org.baeldung.web.exception.NotFoundException;
import org.baeldung.web.model.Bar; import org.baeldung.web.model.Bar;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.client.RestClientTest; import org.springframework.boot.test.autoconfigure.web.client.RestClientTest;
import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.boot.web.client.RestTemplateBuilder;
@ -28,14 +25,11 @@ import static org.springframework.test.web.client.response.MockRestResponseCreat
@RestClientTest @RestClientTest
public class RestTemplateResponseErrorHandlerIntegrationTest { public class RestTemplateResponseErrorHandlerIntegrationTest {
private static final Logger LOGGER = LoggerFactory.getLogger(RestTemplateResponseErrorHandler.class);
@Autowired private MockRestServiceServer server; @Autowired private MockRestServiceServer server;
@Autowired private RestTemplateBuilder builder; @Autowired private RestTemplateBuilder builder;
@Test(expected = NotFoundException.class) @Test(expected = NotFoundException.class)
public void givenCallToRemoteApi_when404ErrorReceived_throwNotFoundException() { public void givenRemoteApiCall_when404Error_thenThrowNotFound() {
Assert.assertNotNull(this.builder); Assert.assertNotNull(this.builder);
Assert.assertNotNull(this.server); Assert.assertNotNull(this.server);