【发布时间】:2025-12-15 15:15:02
【问题描述】:
如果我有一些静态标头应该应用于 任何 使用RestTemplate 发送的请求:应该如何添加这些标头?
在本例中,我总是希望发送 http 标头 accept=applicaton/json。 (它也可以是任何其他标题,也可以是多个标题)。
1) HttpEntity 直接在发送前:
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE);
ResponseEntity<Rsp> http = restTemplate.postForEntity(host, new HttpEntity<>(req, headers), type);
2)ClientHttpRequestInterceptor:
class MyInterceptor implements ClientHttpRequestInterceptor {
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
request.getHeaders().set(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE);
return execution.execute(request, body);
}
}
@Bean
public RestTemplateCustomizer customizer() {
return restTemplate -> restTemplate.getInterceptors().add(new MyInterceptor());
}
然后发帖:
restTemplate.postForEntity(host, req, type);
哪一个比另一个有优势,因此应该被首选?
【问题讨论】:
-
拦截器通常用于入站请求,对于出站请求,您只需使用一个实用方法即可。
-
@VinayAvasthi 你能举个例子吗?因为,正如上面
HttpRequest request所见,所以我认为它的目的不是针对入站请求。 -
看来我错了。我不知道。似乎有一个客户端请求的拦截器。我会说拦截器是一种更好的方法,因为所有请求都需要对请求进行类似的添加。
标签: java spring resttemplate spring-web