使用json路径表达式进行Spring Integration转换错误

时间:2017-05-05 15:30:56

标签: json spring-integration spring-json

我的spring集成尝试从输入通道转换JSON消息,并通过提供相应的密钥从JSON消息中提取值。它抛出SpelEvaluationException。

Spring集成配置

<int:object-to-json-transformer input-channel="inputEventChannel" output-channel="jsonMapChannel"/>

<int:transformer input-channel="jsonMapChannel" output-channel="transformChannel" 
     expression="#jsonPath(payload, '$.[0].EVENTNAME')"/>

错误消息

  

引起:org.springframework.messaging.MessageHandlingException:表达式评估失败:#jsonPath(payload,&#39; $。[0] .EVENTNAME&#39;);嵌套异常是org.springframework.expression.spel.SpelEvaluationException:EL1022E:函数&#39; jsonPath&#39;映射到类型为org.springframework.expression.TypedValue&#39;类的对象。无法调用,failedMessage = GenericMessage [payload = [{&#34; EVENTID&#34;:5064015,&#34; EVENTNAME&#34;:&#34; Account&#34;,&#34; EVENTID&#34; :&#34; 15590&#34;&#34;的applicationID&#34;:1,&#34; CREATEDTIMESTAMP&#34;:1493929367000,&#34; TRANSACTIONID&#34;:&#34; 100.2.33&#34 ;}],headers = {json__ContentTypeId __ = class org.springframework.util.LinkedCaseInsensitiveMap,id = acbc053a-b466-fbb9-8d3d-f60c78371b3e,json__TypeId __ = class java.util.ArrayList,contentType = application / json,timestamp = 1493933245720}]

我可以知道这里出了什么问题吗?我甚至试过这个。相同的错误行为。

#jsonPath(payload, '$.EVENTNAME')

感谢。

1 个答案:

答案 0 :(得分:2)

EL1022E表示jsonPath函数未注册为函数。

这意味着JsonPath jar不在类路径上。

DEBUG日志记录应显示此日志...

logger.debug("The '#jsonPath' SpEL function cannot be registered: " +
        "there is no jayway json-path.jar on the classpath.");