2017-05-05 4 views
3

私のSpring統合は、入力チャネルからJSONメッセージを変換し、対応するキーを提供することによってJSONメッセージから値を抽出しようとしています。 SpelEvaluationExceptionがスローされます。jsonパス表現による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: 'class org.springframework.expression.TypedValue'型のオブジェクトにマップされた関数 'jsonPath'は呼び出せません。failedMessage = GenericMessage [payload = [{" 1、 "CREATEDTIMESTAMP":1493929367000、 "TRANSACTIONID": "100.2.33"}、ヘッダー= {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

おかげで、あなたが示唆したように、私は、JSON-パス用のMavenのエントリを追加した後、それが働いた@GaryRussell ...このログを表示する必要があります。 – VeeAar

+0

Spring IntegrationでのJSONメッセージの処理に関するもう1つの質問があります。いくつかのキーと値のペアを変更したり、既存のJSONメッセージにさらにいくつかのキーと値のペアを追加する必要がある場合は、それらを達成する方法を知っていますか?ありがとう。 – VeeAar

+0

あなたは本当に新しい質問をするべきです - ここの管理者はコメントの拡張された解説や無関係の質問を好まないのです。ターゲットクラスが 'LinkedHashMap'であるjson-to-object-transformerを使用することができます。新しいプロパティを追加し、再びjsonに変換し直します。つまり、元のオブジェクトが最初に 'LinkedCaseInsensitiveMap'のリストだったようです。そのため、JSONに変換する前にマップを操作しないでください。 –

関連する問題