我遇到了远程服务的问题我无法控制对使用Spring的RestTemplate发送的请求的HTTP 400响应.使用curl发送的请求会被接受,因此我将它们与通过RestTemplate发送的请求进行了比较.特别是,Spring请求具有标题Connection,Content-Type和Content-Length,而curl请求则没有.如何配置Spring不添加它们?
最佳答案
实际上这可能不是问题所在.我的猜测是你没有指定正确的消息转换器.但这是一种删除标题的技术,以便您可以确认:
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);
}
}
@Bean
public RestTemplate restTemplate()
{
RestTemplate restTemplate = new RestTemplate();
restTemplate.setInterceptors(Arrays.asList(new CustomHttpRequestInterceptor(),new LoggingRequestInterceptor()));
return restTemplate;
}