如何删除Spring的RestTemplate添加的某些HTTP头?

Psy*_*nch 6 java spring spring-mvc resttemplate

我遇到了远程服务的问题我无法控制对使用Spring的RestTemplate发送的请求的HTTP 400响应.使用curlget 发送的请求虽然已被接受,因此我将它们与通过RestTemplate发送的请求进行了比较.特别是春天的要求有头Connection,Content-Type以及Content-Lengthcurl请求不.如何配置Spring不添加它们?

cos*_*r11 5

很可能这实际上并不是问题所在。我的猜测是您没有指定正确的消息转换器。但这里有一种删除标头的技术,以便您可以确认:

1. 创建自定义ClientHttpRequestInterceptor实现:

public class CustomHttpRequestInterceptor implements ClientHttpRequestInterceptor
{

   @Override
   public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException
   {
        HttpHeaders headers = request.getHeaders();
        headers.remove(HttpHeaders.CONNECTION);
        headers.remove(HttpHeaders.CONTENT_TYPE);
        headers.remove(HttpHeaders.CONTENT_LENGTH);

        return execution.execute(request, body);
    }

}
Run Code Online (Sandbox Code Playgroud)

2.然后添加到RestTemplate的拦截器链中:

@Bean
public RestTemplate restTemplate()
{

   RestTemplate restTemplate = new RestTemplate();
   restTemplate.setInterceptors(Arrays.asList(new CustomHttpRequestInterceptor(), new LoggingRequestInterceptor()));

   return restTemplate;
}
Run Code Online (Sandbox Code Playgroud)

  • 不能正常工作。只有[将标头设置为空](/sf/answers/2171523021/) 有效。 (3认同)
  • 您正在创建一个新对象“标头”,并且更改永远不会包含在请求中 (2认同)