Как получить значения полезной нагрузки из сообщения byte [] в Spring Integration int-http: outbound-gateway? - PullRequest
0 голосов
/ 08 декабря 2018

Я настраиваю outbound-gateway в моем context.xml, где я хочу извлечь значения из полезной нагрузки типа byte[] и использовать их для создания URI.Я обнаружил, что SpEL позволяет построить его следующим образом:

url-expression="T(org.springframework.web.util.UriComponentsBuilder)
                       .fromHttpUrl('http://HOST:PORT/PATH')
                       .queryParams(payload)
                       .build()
                       .toUri()"

Источник: https://docs.spring.io/spring-integration/reference/html/http.html#mapping-uri-variables

Мой вариант решения выглядит следующим образом:

<int-http:outbound-gateway id="candleRequestGateway"
                           request-channel="candleRequestChannel"
                           reply-channel="dataResponseChannel"
                           http-method="GET"
                           url-expression="T(org.springframework.web.util.UriComponentsBuilder)
                                        .fromHttpUrl('some/{path}')
                                        .queryParam('myParam', payload.get('myParam'))
                                        .buildAndExpand(payload.get('path'))
                                        .toUri()"/>

Тем не менее, я получаю следующую ошибку при выполнении payload.get('myParam') part:

org.springframework.messaging.MessageHandlingException: error occurred in message handler [org.springframework.integration.http.outbound.HttpRequestExecutingMessageHandler#3]; nested exception is org.springframework.expression.spel.SpelEvaluationException: EL1004E: Method call: Method get(java.lang.String) cannot be found on type byte[]

Я понимаю и согласен с ошибкой.Мой вопрос: есть ли способ (конкретное выражение SpEL (?)) Извлечь значения из полезной нагрузки byte[], не преобразовывая ее до того, как она достигнет outbound-gateway?Это правильное решение вообще?

1 Ответ

0 голосов
/ 08 декабря 2018

Именно то, что вы ожидаете от payload.get('myParam') и payload.get('path'), когда byte[].

. Очевидно, что byte[] не имеет get(String) метода.

для извлечения значений из byte[]

Извлечь как?byte[] - неструктурированный массив байтов;единственное, что вы можете сделать, это что-то вроде new String(payload).substring(0, 5) или аналогичное.

Если байты содержат JSON, вы можете использовать функцию #jsonPath SpEL.

...