spring - RestTemplate 使用 HttpEntity 调用帖子> 内部数据转换为 base64
问题描述
我们有一个调用其他(也是spring)微服务的spring微服务
客户服务:
使用 restTemplate 通过 POST 操作调用服务
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
body.add("somekey", someObject);
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, headers);
...
ResponseEntity<String> response = restTemplate.postForEntity(url, requestEntity, String.class);
传递“someObject”的对象有一些成员,它们的值是俄语
服务器服务:
public ResponseEntity<Item> someName(@RequestHeader Map<String, String> headers,
@RequestParam("someObject") String data)
数据可以很好地到达服务器服务,但是,俄语文本被转换为相同文本的 Base64 表示。所以数据不再有效。英文文本看起来不错
知道为什么会发生这种情况以及如何解决吗?
解决方案
好的,发现这个必须升级spring版本
从:
<version>2.2.6.RELEASE</version>
至:
<version>2.3.7.RELEASE</version>
然后试图理解为什么这个升级有帮助,发现我们有这个配置集
spring.http.encoding.force-request=false
当更改为
spring.http.encoding.force-request=true
事情又开始工作了,根本不需要升级
那么为什么升级有帮助呢?
配置:
spring.http.encoding.force-request
在 2.3.0 版中已弃用并替换为
server.servlet.encoding.force-request
所以因为升级后它被“设置”为默认值,然后它就可以工作了
推荐阅读
- angular - Angular NgZone.runOutsideAngular 和 OnPush 变化检测策略
- sql - 在 PostgreSQL 中每小时累积经过的分钟数
- objective-c - 使用 UIAlertController 调用其包含函数
- python-3.x - 如何在 python 中 ping 到源地址以使用
- docker - JHipster Jenkins 构建损坏
- javascript - 将输入的数字转换为元素到人类可读的日期
- django-models - 我了解复选框可能会传递多个值以进行进一步过滤。如何使用同一列的两个值来过滤表
- postgresql - 如何计算包括当前季度在内的历史季度相同周数的收入表现?
- adaptive-cards - 为 Microsoft Flow/Teams 自适应卡表单添加客户端验证
- javascript - 为什么 Jest / Enzyme 跟踪/听力 componentDidMount 或任何 React 功能不正常?