记一次restTemplate.getForEntity携带headers失败,restTemplate. exchange
【摘要】 记一次使用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)