Так как я не смог найти проект JIRA для Spring Integration, я создал здесь одну проблему, но, думаю, она не отслеживается ... 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» на следующие работы для «.» и "-", но не для умлаутов (т.е. ü). Умлауты будут отправлены в виде 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.