Spring Integration Http出站适配器错误地编码了uri变量中的变音符号

时间:2019-05-21 12:36:59

标签: spring-integration spring-integration-dsl

由于找不到Spring Integration的JIRA项目,因此我在这里创建了一个问题,但我想它没有被跟踪... https://jira.spring.io/browse/INFRA-32

编码uri变量似乎有问题。我的流程以文件入站适配器开头。

使用以下代码,特殊字符为“。”或“-”将无法正确编码(每个字符都会以某种方式计为2)。

.transform(Files.toStringTransformer())
.handle(Http.outboundGateway(uri + "?text={text}")
.httpMethod(HttpMethod.GET)
.uriVariable("text", "payload")
.expectedResponseType(String.class))

将Files.toStringTransofmer更改为“。”的以下作品。和“-”,但不适用于变音符号(即ü)。 Umlauts将以2个字符的形式发送:

.transform(Files.toByteArrayTransformer())
.transform(new ObjectToStringTransformer())
.handle(Http.outboundGateway(uri + "?text={text}")
.httpMethod(HttpMethod.GET)
.uriVariable("text", "payload")
.expectedResponseType(String.class))

在以上两个示例中添加UTF-8字符集并没有任何改变(我的默认字符集还是UTF-8)。

将以上内容更改为以下代码可以解决此问题:

.<File>handle((p, h) -> {
try
 { String body = FileUtils.readFileToString(p, "UTF-8").substring(10); RestTemplate restTemplate = new RestTemplate(); String annotationUrl = uri + "?text={text}
";
ResponseEntity<String> response = restTemplate.getForEntity(annotationUrl, String.class, body);
return response.getBody();
} catch (Exception e)
 { throw new RuntimeException("Exception while parsing text body document", e); }
})

我正在使用以下版本:

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

知道是错误还是功能? ;)

它似乎类似于https://jira.spring.io/browse/INT-2455

0 个答案:

没有答案