我正在我的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
之前对其进行转换?这是一个有效的解决方案吗?
答案 0 :(得分:1)
当有效载荷为payload.get('myParam')
时,您究竟期望payload.get('path')
和byte[]
做什么。
很显然,byte[]
没有get(String)
方法。
从
中提取值byte[]
如何提取? byte[]
是字节的非结构化数组;您唯一可以做的就是类似new String(payload).substring(0, 5)
之类的东西。
如果字节包含JSON,则可以使用#jsonPath
SpEL函数。