设置Spring RestTemplate的默认内容类型标题

问题描述:

我目前使用扩展Spring RestTemplate的OAuth2RestOperations,我想指定内容类型标题。设置Spring RestTemplate的默认内容类型标题

我已经成功地做的唯一的事情是请求时明确设置我的头:

public String getResult() { 
    String result = myRestTemplate.exchange(uri, HttpMethod.GET, generateJsonHeader(), String.class).getBody(); 
} 

private HttpEntity<String> generateJsonHeader() { 
    HttpHeaders headers = new HttpHeaders(); 
    headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); 
    return new HttpEntity<>("parameters", headers); 
} 

但它实际上将是巨大的,以便能够设置一劳永逸豆初始化期间,并直接使用getforObject方法而不是交换。

首先,你必须创建请求拦截器:

public class JsonMimeInterceptor implements ClientHttpRequestInterceptor { 

    @Override 
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, 
     ClientHttpRequestExecution execution) throws IOException { 
    HttpHeaders headers = request.getHeaders(); 
    headers.add("Accept", MediaType.APPLICATION_JSON); 
    return execution.execute(request, body); 
    } 
} 

...然后你有使用上面的拦截休息模板创建代码:

@Configuration 
public class MyAppConfig { 

    @Bean 
    public RestTemplate restTemplate() { 
     RestTemplate restTemplate = new RestTemplate(clientHttpRequestFactory()); 
     restTemplate.setInterceptors(Collections.singletonList(new JsonMimeInterceptor())); 
     return restTemplate; 
    } 
} 

你可以继承RestTemplate如果你要在您的应用程序中有一些其他专用或通用的REST模板。