记一次restTemplate.getForEntity携带headers失败,restTemplate. exchange

举报
object 发表于 2022/07/27 18:22:16 2022/07/27
【摘要】 记一次使用restTemplate.getForEntity携带header失败的请求情况的解决办法。由于某天突然接到一个需求,需要访问一下某个接口,而且改接口,必须要携带当前用户的cookie。由于系统基本使用的都是restTemplate.postForEntity,携带header都是没问题,于是我直接换成了get,于是就悲剧了。restTemplate.postForEntity代码...

记一次使用restTemplate.getForEntity携带header失败的请求情况的解决办法。由于某天突然接到一个需求,需要访问一下某个接口,而且改接口,必须要携带当前用户的cookie。由于系统基本使用的都是restTemplate.postForEntity,携带header都是没问题,于是我直接换成了get,于是就悲剧了。

restTemplate.postForEntity代码如下

// 获取header
HttpHeaders headers = new HttpHeaders();
HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();
headers.add("Cookie", request.getHeader("Cookie"));
// 发送
Map<String, Object> param = new HashMap<>();
param.put("param", "param");
HttpEntity<String> entity = new HttpEntity<>(JSON.toJSONString(param), headers);
ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, entity, String.class);
String body = responseEntity.getBody();

这些都没有问题,请求都很正常

于是我把restTemplate.postForEntity 改为了restTemplate.getForEntity。出现了报错信息

经过仔细比较和postForEntity的区别。

我改成了。自信满满的可以了,然后就是漫漫的查原因。

ResponseEntity<String> responseEntity = restTemplate.getForEntity("", String.class, entity);

最终结论,getforEntity没有设置header的方法,虽然我调换了顺序没有报错了,但是调换后,根本就不是设置header的值。也不存在setHeader

restTemplate.exchage

属于模板方法,能够直接设置请求方式,设置请求头。关键代码如下:

ResponseEntity<String> exchange = restTemplate.exchange(url,
        HttpMethod.GET, entity, String.class, new Object[0]);

使用该方法就能get请求携带请求头了。

其他:网上也搜到了一些使用getForEntity,发送header的办法,类似使用filter,比较麻烦,就不展开了。有兴趣的自己百度。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。