为 Spring TestRestTemplate 集成测试添加 Header 值
Add Header Value For Spring TestRestTemplate Integration Test
我正在使用 TestRestTemplate
对我们的产品进行集成测试。
我有一个看起来像这样的测试:
@Test
public void testDeviceQuery() {
ResponseEntity<Page> deviceInfoPage = template.getForEntity(base, Page.class);
// validation code here
}
此特定请求需要一个 Header 值。有人可以告诉我如何将 header 添加到 TestRestTemplate
调用吗?
更新:As of Spring Boot 1.4.0, TestRestTemplate
不再扩展 RestTemplate
但仍提供与 RestTemplate
相同的 API。
TestRestTemplate
extends RestTemplate
提供与 RestTemplate
相同的 API,因此您可以使用相同的 API 用于发送请求。例如:
HttpHeaders headers = new HttpHeaders();
headers.add("your_header", "its_value");
template.exchange(base, HttpMethod.GET, new HttpEntity<>(headers), Page.class);
如果您希望使用 TestRestTemplate
的所有请求都包含某些 headers,您可以将以下内容添加到您的设置中:
testRestTemplate.getRestTemplate().setInterceptors(
Collections.singletonList((request, body, execution) -> {
request.getHeaders()
.add("header-name", "value");
return execution.execute(request, body);
}));
如果您想对所有请求使用多个 headers,您可以添加以下内容
import org.apache.http.Header;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
private void setTestRestTemplateHeaders() {
Header header = new BasicHeader("header", "value");
Header header2 = new BasicHeader("header2", "value2");
List<Header> headers = new ArrayList<Header>();
headers.add(header);
headers.add(header2);
CloseableHttpClient httpClient = HttpClients.custom().setDefaultHeaders(headers).build();
testRestTemplate.getRestTemplate().setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient));
}
设置 headers 后,您可以使用 TestRestTemplate [testRestTemplate]
或 RestTemplate [testRestTemplate.getRestTemplate()]
进行 REST 调用
我正在使用 TestRestTemplate
对我们的产品进行集成测试。
我有一个看起来像这样的测试:
@Test
public void testDeviceQuery() {
ResponseEntity<Page> deviceInfoPage = template.getForEntity(base, Page.class);
// validation code here
}
此特定请求需要一个 Header 值。有人可以告诉我如何将 header 添加到 TestRestTemplate
调用吗?
更新:As of Spring Boot 1.4.0, TestRestTemplate
不再扩展 RestTemplate
但仍提供与 RestTemplate
相同的 API。
TestRestTemplate
extends 提供与 RestTemplate
RestTemplate
相同的 API,因此您可以使用相同的 API 用于发送请求。例如:
HttpHeaders headers = new HttpHeaders();
headers.add("your_header", "its_value");
template.exchange(base, HttpMethod.GET, new HttpEntity<>(headers), Page.class);
如果您希望使用 TestRestTemplate
的所有请求都包含某些 headers,您可以将以下内容添加到您的设置中:
testRestTemplate.getRestTemplate().setInterceptors(
Collections.singletonList((request, body, execution) -> {
request.getHeaders()
.add("header-name", "value");
return execution.execute(request, body);
}));
如果您想对所有请求使用多个 headers,您可以添加以下内容
import org.apache.http.Header;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
private void setTestRestTemplateHeaders() {
Header header = new BasicHeader("header", "value");
Header header2 = new BasicHeader("header2", "value2");
List<Header> headers = new ArrayList<Header>();
headers.add(header);
headers.add(header2);
CloseableHttpClient httpClient = HttpClients.custom().setDefaultHeaders(headers).build();
testRestTemplate.getRestTemplate().setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient));
}
设置 headers 后,您可以使用 TestRestTemplate [testRestTemplate]
或 RestTemplate [testRestTemplate.getRestTemplate()]
进行 REST 调用