web-dev-qa-db-fra.com

Ajouter une valeur d'en-tête pour le test d'intégration Spring TestRestTemplate

J'utilise TestRestTemplate pour les tests d'intégration sur notre produit.

J'ai un test qui ressemble à ceci:

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

    // validation code here
}

Cette demande particulière attend une valeur d'en-tête. Quelqu'un peut-il me dire comment ajouter un en-tête à l'appel TestRestTemplate?

20
DavidR

Si vous souhaitez que toutes vos demandes utilisant TestRestTemplate incluent certains en-têtes, vous pouvez ajouter les éléments suivants à votre configuration:

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

Update: A partir de Spring Boot 1.4.0 , TestRestTemplate ne étend plus RestTemplate mais fournit toujours la même API que RestTemplate.

TestRestTemplate étend RestTemplate fournit la même API que RestTemplate, vous pouvez donc utiliser cette même API pour envoyer des demandes. Par exemple:

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

Si vous souhaitez utiliser plusieurs en-têtes pour toutes vos demandes, vous pouvez ajouter le suivant

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

Une fois les en-têtes définis, vous pouvez utiliser TestRestTemplate [testRestTemplate] ou RestTemplate [testRestTemplate.getRestTemplate()] pour vos appels REST.

0
Vasu K S