2015-03-13 69 views
2

我们可以在发起呼叫时设置标题来休息模板,即restTemplate.exchange(postUrl, HttpMethod.GET, entity, String.class);
其中实体包含标题。如何在创建Spring的RestTemplate时设置标题?

但是对于我的要求,我想在创建restTemplate本身时设置cookie标头,而不是在触发实际的调用时。我不想重复创建HttpEntity并设置标题的代码。

有没有办法在创建restTemplate时设置标题?

回答

1

看起来像你可以注入自己的HttpMessageConverter实现,它接受所有请求 - canWrite返回true。并将write方法中的所需标题添加到HttpOutputMessage.getHeaders()

我记得当我重写一次ClientHttpRequestFactory.createRequest为其他服务器特定的静态头做类似的事情。

UPDATE

RestTemplate.doWithRequest的代码,你可以看到,如果没有request.body然后读取来自request entityheaders

在这种情况下,你可以简单地扩展RestTemplate和重写的httpEntityCallback自己RequestCallback返回。

+0

Hey Artem, 感谢您的回复。我试过你的解决方案,但它不适用于没有请求正文:(其中包括几乎所有的获取调用
从RestTemplate.doWithRequest的代码,你可以看到是否没有request.body然后它从头读取标题请求实体有什么其他的方法来实现这个吗 – Pratz 2015-03-15 10:23:16

+0

好的,谢谢你指出,对于'GET'它不使用'messageConverters'。查看我的答案更新。 – 2015-03-15 16:13:33

相关问题