2017-05-05 135 views
3

我的Spring集成嘗試從輸入通道轉換JSON消息,並通過提供相應的鍵提取JSON消息的值。它拋出SpelEvaluationException。json路徑表達式的Spring集成轉換錯誤

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(有效載荷,「$ [ 0] .EVENTNAME');嵌套的異常是org.springframework.expression.spel.SpelEvaluationException:EL1022E:函數'jsonPath'映射到無法調用的類'org.springframework.expression.TypedValue'類型的對象,failedMessage = GenericMessage [payload = [{ EVENTTID「:」帳戶「,」EVENTID「:」15590「,」APPLICATIONID「:1,」CREATEDTIMESTAMP「:1493929367000,」TRANSACTIONID「:」100.2.33「}],headers = {json__ContentTypeId __ =類org.springframework.util.LinkedCaseInsensitiveMap,ID = acbc053a-B466-fbb9-8d3d-f60c78371b3e,json__TypeId __ =類java.util.ArrayList,則contentType =應用/ JSON,時間戳= 1493933245720}]

我可以知道這裏出了什麼問題?我甚至也試過這個。相同的錯誤行爲。

#jsonPath(payload, '$.EVENTNAME') 

謝謝。

回答

2

EL1022E表示jsonPath函數未作爲函數註冊。

這意味着JsonPath jar不在類路徑中。

調試日誌應該顯示此日誌...

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

感謝@GaryRussell它的工作後,我添加了JSON-路徑Maven的入門如你所說。 – VeeAar

+0

在Spring Integration中處理JSON消息還有一個問題。如果我們需要修改一些鍵值對或向現有的JSON消息添加更少的鍵值對,我是否可以知道如何實現這些?謝謝。 – VeeAar

+0

你真的應該問一個新問題 - 這裏的管理員不喜歡評論中的擴展評論或無關的問題。你可以使用一個json-to-object-transformer,目標類是一個'LinkedHashMap' - 添加新的屬性並再次將它轉換回json。也就是說,它看起來像你的原始對象首先是一個「LinkedCaseInsensitiveMap」列表,所以爲什麼不在轉換爲JSON之前操作地圖。 –