如何从 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 函数。
我正在我的 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 函数。