Добавить значение заголовка для теста интеграции Spring TestRestTemplate

Я использую TestRestTemplate для тестирования интеграции на нашем продукте.

У меня есть один тест, который выглядит так:

@Test
public void testDeviceQuery() {
    ResponseEntity<Page> deviceInfoPage = template.getForEntity(base, Page.class);

    // validation code here
}

Этот конкретный запрос ожидает значение заголовка. Может кто-нибудь, пожалуйста, дайте мне знать, как я могу добавить заголовок к вызову TestRestTemplate?

Ответ 1

Если вы хотите, чтобы все ваши запросы с помощью TestRestTemplate включали определенные заголовки, вы можете добавить следующие настройки:

testRestTemplate.getRestTemplate().setInterceptors(
        Collections.singletonList((request, body, execution) -> {
            request.getHeaders()
                    .add("header-name", "value");
            return execution.execute(request, body);
        }));

Ответ 2

Обновление: Начиная с Spring Boot 1.4.0, TestRestTemplate больше не распространяется на RestTemplate, но по-прежнему предоставляет тот же API, что и RestTemplate.

TestRestTemplate расширяет RestTemplate предоставляет тот же API, что и RestTemplate, поэтому вы можете использовать тот же API для отправки запросов. Например:

HttpHeaders headers = new HttpHeaders();
headers.add("your_header", "its_value");
template.exchange(base, HttpMethod.GET, new HttpEntity<>(headers), Page.class);

Ответ 3

Если вы хотите использовать несколько заголовков для всех своих запросов, вы можете добавить ниже

 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));
 }

После установки заголовков вы можете использовать TestRestTemplate [testRestTemplate] или RestTemplate [testRestTemplate.getRestTemplate()] для ваших вызовов REST