製品の統合テストにTestRestTemplate
を使用しています。
次のようなテストが1つあります。
@Test
public void testDeviceQuery() {
ResponseEntity<Page> deviceInfoPage = template.getForEntity(base, Page.class);
// validation code here
}
この特定のリクエストでは、ヘッダー値が必要です。 TestRestTemplate
呼び出しにヘッダーを追加する方法を教えてください。
TestRestTemplate
を使用するすべてのリクエストに特定のヘッダーを含める場合、次をセットアップに追加できます。
testRestTemplate.getRestTemplate().setInterceptors(
Collections.singletonList((request, body, execution) -> {
request.getHeaders()
.add("header-name", "value");
return execution.execute(request, body);
}));
Update: Spring Boot 1.4.0以降 、 TestRestTemplate
はしませんRestTemplate
を拡張しますが、RestTemplate
と同じAPIを引き続き提供します。
TestRestTemplate
RestTemplate
を拡張しますRestTemplate
と同じAPIを提供するため、リクエストの送信に同じAPIを使用できます。例えば:
HttpHeaders headers = new HttpHeaders();
headers.add("your_header", "its_value");
template.exchange(base, HttpMethod.GET, new HttpEntity<>(headers), Page.class);
すべてのリクエストに複数のヘッダーを使用する場合は、以下を追加できます
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));
}
ヘッダーを設定したら、REST呼び出しにTestRestTemplate [testRestTemplate]
またはRestTemplate [testRestTemplate.getRestTemplate()]
を使用できます