我们可以在发起呼叫时设置标题来休息模板,即restTemplate.exchange(postUrl, HttpMethod.GET, entity, String.class);
其中实体包含标题。如何在创建Spring的RestTemplate时设置标题?
但是对于我的要求,我想在创建restTemplate本身时设置cookie标头,而不是在触发实际的调用时。我不想重复创建HttpEntity并设置标题的代码。
有没有办法在创建restTemplate时设置标题?
我们可以在发起呼叫时设置标题来休息模板,即restTemplate.exchange(postUrl, HttpMethod.GET, entity, String.class);
其中实体包含标题。如何在创建Spring的RestTemplate时设置标题?
但是对于我的要求,我想在创建restTemplate本身时设置cookie标头,而不是在触发实际的调用时。我不想重复创建HttpEntity并设置标题的代码。
有没有办法在创建restTemplate时设置标题?
看起来像你可以注入自己的HttpMessageConverter
实现,它接受所有请求 - canWrite
返回true
。并将write
方法中的所需标题添加到HttpOutputMessage.getHeaders()
。
我记得当我重写一次ClientHttpRequestFactory.createRequest
为其他服务器特定的静态头做类似的事情。
UPDATE
从
RestTemplate.doWithRequest
的代码,你可以看到,如果没有request.body
然后读取来自request entity
headers
。
在这种情况下,你可以简单地扩展RestTemplate
和重写的httpEntityCallback
自己RequestCallback
返回。
Hey Artem, 感谢您的回复。我试过你的解决方案,但它不适用于没有请求正文:(其中包括几乎所有的获取调用
从RestTemplate.doWithRequest的代码,你可以看到是否没有request.body然后它从头读取标题请求实体有什么其他的方法来实现这个吗 – Pratz 2015-03-15 10:23:16
好的,谢谢你指出,对于'GET'它不使用'messageConverters'。查看我的答案更新。 – 2015-03-15 16:13:33