2016-01-06 13 views
13

我正在使用TestRestTemplate對我們的產品進行集成測試。爲Spring添加標題值TestRestTemplate集成測試

我有一個測試,看起來像這樣:

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

    // validation code here 
} 

這種特殊的請求需要一個標頭值。有人可以讓我知道我怎麼可以添加一個頭到TestRestTemplate電話?

回答

9

如果希望所有使用TestRestTemplate包括某些特定的頭你的要求,你可以添加以下到您的設置:

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

更新As of Spring Boot 1.4.0TestRestTemplate不延長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); 
+0

它工作!,謝謝 – NCrash

+2

這解決了它,謝謝一堆。只需要注意的一點是'HttpHeaders'必須來自'org.springframework.http'包 –

0

如果要使用多個標題爲所有請求,可以一旦標頭設置您可以使用TestRestTemplate [testRestTemplate]RestTemplate [testRestTemplate.getRestTemplate()]爲您的休息下面添加

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

的要求