Исходящий адаптер Spring Integration Http неправильно кодирует умлауты из переменных URI - PullRequest
0 голосов
/ 21 мая 2019

Так как я не смог найти проект 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...