resttemplate返回类型,设置Spring RestTemplate的默认内容类型标头

I'm currently using an OAuth2RestOperations that extends the Spring RestTemplate and I would like to specify the content type header.

The only thing I've managed to do was to explicitly set my header during the request:

public String getResult() {

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

}

private HttpEntity generateJsonHeader() {

HttpHeaders headers = new HttpHeaders();

headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));

return new HttpEntity<>("parameters", headers);

}

But it would actually be great to be able to set that once and for all during the bean initialization, and directly use the getforObject method instead of exchange.

解决方案

First you have to create request interceptor:

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);

}

}

... and then you have rest template creation code which uses above interceptor:

@Configuration

public class MyAppConfig {

@Bean

public RestTemplate restTemplate() {

RestTemplate restTemplate = new RestTemplate(clientHttpRequestFactory());

restTemplate.setInterceptors(Collections.singletonList(new JsonMimeInterceptor()));

return restTemplate;

}

}

You could subclass RestTemplate if you were to have some other specialised or universal REST templates in your application.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值