RestTempalte 和 TestRestTemplate 是开发 Spring Boot 应用中常会用的类,它们模拟了一个 Http 的客户端,用来访问或测试 Http 服务。在实践中,我们经常需要在通过 RestTemplate 发出的请求中添加 Header 信息,比如使用 token 来跟踪用户身份的时,就经常将 token 放到请求的 header 中发送给服务端。 本文总结了在 RestTempalte 中添加 Header 信息的方法。

通过 HttpEntity 来添加

在 RestTemplate 的 post* (比如 postForObject) 方法中,可以添加一个 HttpEntity 参数,其中就可以添加 Header 信息, 示例代码如下:

1
2
3
4
5
6
HttpHeaders headers = new HttpHeaders();
headers.set(Constants.HEADER_AUTH_TOKEN_KEY, "token-001");

HttpEntity request = new HttpEntity(headers);

String res = this.restTemplate.postForObject("http://localhost:" + port + "/v1/api/auth/test", request, String.class);

通过构造拦截器(Interceptor)来添加

对于没有提供 HttpEntity 参数的方法,还可以采用在构造拦截器(Interceptor)中添加的方法,代码如下:

1
2
3
4
5
6
restTemplate.getRestTemplate().setInterceptors(
Collections.singletonList((request, body, execution) -> {
request.getHeaders()
.add(Constants.HEADER_AUTH_TOKEN_KEY, token);
return execution.execute(request, body);
}));
TAGS