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

时间:2018-12-08 11:52:22

标签: spring http integration spring-el payload

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

1 个答案:

答案 0 :(得分:1)

当有效载荷为payload.get('myParam')时,您究竟期望payload.get('path')byte[]做什么。

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

  

byte[]

中提取值

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

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