> 内部数据转换为 base64,spring,base64,resttemplate"/>

首页 > 解决方案 > 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 表示。所以数据不再有效。英文文本看起来不错

知道为什么会发生这种情况以及如何解决吗?

标签: springbase64resttemplate

解决方案


好的,发现这个必须升级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

所以因为升级后它被“设置”为默认值,然后它就可以工作了


推荐阅读