package com.baeldung; import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.IntegrationTest; import org.springframework.boot.test.SpringApplicationContextLoader; import org.springframework.http.HttpMethod; import org.springframework.http.client.ClientHttpResponse; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.web.client.ResponseErrorHandler; import org.springframework.web.client.ResponseExtractor; import org.springframework.web.client.RestTemplate; //@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = SpringDemoApplication.class, loader = SpringApplicationContextLoader.class) @WebAppConfiguration @IntegrationTest public class SpringIntegrationTest { protected static ResponseResults latestResponse = null; @Autowired protected RestTemplate restTemplate; protected void executeGet(String url) throws IOException { final Map headers = new HashMap<>(); headers.put("Accept", "application/json"); final HeaderSettingRequestCallback requestCallback = new HeaderSettingRequestCallback(headers); final ResponseResultErrorHandler errorHandler = new ResponseResultErrorHandler(); restTemplate.setErrorHandler(errorHandler); latestResponse = restTemplate.execute(url, HttpMethod.GET, requestCallback, response -> { if (errorHandler.hadError) { return (errorHandler.getResults()); } else { return (new ResponseResults(response)); } }); } protected void executePost(String url) throws IOException { final Map headers = new HashMap<>(); headers.put("Accept", "application/json"); final HeaderSettingRequestCallback requestCallback = new HeaderSettingRequestCallback(headers); final ResponseResultErrorHandler errorHandler = new ResponseResultErrorHandler(); if (restTemplate == null) { restTemplate = new RestTemplate(); } restTemplate.setErrorHandler(errorHandler); latestResponse = restTemplate.execute(url, HttpMethod.POST, requestCallback, response -> { if (errorHandler.hadError) { return (errorHandler.getResults()); } else { return (new ResponseResults(response)); } }); } private class ResponseResultErrorHandler implements ResponseErrorHandler { private ResponseResults results = null; private Boolean hadError = false; private ResponseResults getResults() { return results; } @Override public boolean hasError(ClientHttpResponse response) throws IOException { hadError = response.getRawStatusCode() >= 400; return hadError; } @Override public void handleError(ClientHttpResponse response) throws IOException { results = new ResponseResults(response); } } }