resttemplate 设置请求头
时间: 2023-05-08 14:57:50 浏览: 2177
http、restTemplate请求资源(含带头部信息)
5星 · 资源好评率100%
RestTemplate 是一个 Spring 框架中的类,可以用于发送 HTTP 请求。在使用 RestTemplate 时,我们可能需要设置自定义的请求头,以传递自定义信息或实现特定功能。以下是 RestTemplate 设置请求头的方法:
1. 使用 HttpHeaders 类添加请求头
可以通过创建 HttpHeaders 对象,然后添加请求头信息来设置请求头。例如:
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", "Basic " + encodeCredentials("username", "password"));
HttpEntity<String> entity = new HttpEntity<>(headers);
在这个例子中,我们设置了一个名为 Authorization 的请求头,值为经过 Base64 编码的用户名和密码。这个请求头用于进行身份认证。
2. 使用 RestTemplate 的 exchange 方法设置请求头
RestTemplate 的 exchange 方法可以接收一个 RequestEntity 对象,该对象包含了请求体和请求头。例如:
HttpHeaders headers = new HttpHeaders();
headers.set("Accept", MediaType.APPLICATION_JSON_VALUE);
RequestEntity<Object> requestEntity = new RequestEntity<>(headers, HttpMethod.GET, new URI(url));
ResponseEntity<String> response = restTemplate.exchange(requestEntity, String.class);
在这个例子中,我们设置了一个名为 Accept 的请求头,值为 application/json,用于指定预期的响应类型为 JSON。
3. 使用 RestTemplate 的 interceptors 设置全局请求头
RestTemplate 的 interceptors 是一组拦截器,可以在发送请求前或收到响应后对请求进行处理。通过扩展 ClientHttpRequestInterceptor,我们可以定义一个拦截器,在每次请求中添加自定义请求头。例如:
public class CustomHeaderInterceptor implements ClientHttpRequestInterceptor {
@Override
public ClientHttpResponse intercept(
HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
HttpHeaders headers = request.getHeaders();
headers.add("Custom-Header", "foo");
return execution.execute(request, body);
}
}
RestTemplate restTemplate = new RestTemplateBuilder()
.additionalInterceptors(new CustomHeaderInterceptor())
.build();
在这个例子中,我们定义了一个名为 Custom-Header 的请求头,值为 foo,并将这个拦截器添加到 RestTemplate 中。每次请求时都会自动添加这个请求头。
总而言之,RestTemplate 可以通过 HttpHeaders 类、exchange 方法或拦截器实现自定义请求头的设置,以满足各种场景下的需求。
阅读全文