要为RestTemplate设置默认的请求头,你通常需要自定义一个ClientHttpRequestInterceptor,这个拦截器会在发送请求之前自动添加你指定的请求头。然后,你将这个拦截器添加到RestTemplate的拦截器列表中。这样,每次使用这个RestTemplate实例发送请求时,都会自动包含你设置的默认请求头。
以下是一个简单的示例,展示如何为RestTemplate设置默认的请求头:
步骤 1: 创建一个拦截器
首先,创建一个实现了ClientHttpRequestInterceptor接口的拦截器类。在这个类的intercept方法中,你可以添加或修改请求头。
import org.springframework.http.HttpRequest;import org.springframework.http.client.ClientHttpRequestExecution;import org.springframework.http.client.ClientHttpRequestInterceptor;import org.springframework.http.client.ClientHttpResponse;
import java.io.IOException;
public class HeaderRequestInterceptor implements ClientHttpRequestInterceptor {
private final String headerName;
private final String headerValue;
public HeaderRequestInterceptor(String headerName, String headerValue) {
this.headerName = headerName;
this.headerValue = headerValue;
}
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
request.getHeaders().set(headerName, headerValue);
return execution.execute(request, body);
}
}
步骤 2: 将拦截器添加到RestTemplate
接下来,创建或配置一个RestTemplate实例,并将你刚才创建的拦截器添加到这个实例的拦截器列表中。
import org.springframework.web.client.RestTemplate;import java.util.Collections;
public class RestClientConfig {
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
// 添加拦截器到RestTemplate
restTemplate.setInterceptors(Collections.singletonList(new HeaderRequestInterceptor("X-App-Name", "MyAppName")));
return restTemplate;
}
}
在这个例子中,我们创建了一个HeaderRequestInterceptor实例,指定了要添加的默认请求头X-App-Name和它的值MyAppName。然后,我们将这个拦截器添加到RestTemplate的拦截器列表中。
使用RestTemplate
现在,每当你使用这个RestTemplate实例发送请求时,X-App-Name: MyAppName这个请求头会自动被添加到每个请求中。
RestTemplate restTemplate = new RestClientConfig().restTemplate();
String response = restTemplate.getForObject("http://example.com/resource", String.class);
这种方法允许你为所有通过特定RestTemplate实例发送的请求设置默认的请求头,而无需在每个请求中手动添加它们。