设置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模板。