如何从 Spring Integration int-http:outbound-gateway 中的 byte[] 消息获取负载值?

How to get payload values from byte[] message in Spring Integration int-http:outbound-gateway?

我正在我的 context.xml 中配置一个 outbound-gateway,我想在其中从 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') 部分时遇到以下错误:

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 之前对其进行转换?这是一个有效的解决方案吗?

当有效载荷是 byte[].

时,您究竟希望 payload.get('myParam')payload.get('path') 做什么

显然,byte[] 没有 get(String) 方法。

to extract the values from byte[]

如何提取? byte[] 是一个非结构化的字节数组;你唯一能做的就是 new String(payload).substring(0, 5) 或类似的东西。

如果字节包含 JSON,您可以使用 #jsonPath SpEL 函数。