2017-10-04 8 views
0

次のリクエストで特定の応答データを使用するシナリオがあります。 私はpayload("{\"alarmName\":\"@variable('apiVersion')@\"}")を実行しましたが、例外はありません。以下は例外メッセージです。@variable()@ matcherを使用しているときにJsonエラーが発生する

{"__v":0,"minVal":18,"alarmName":"TempAlarm7","_id":"59d50f49e877251d1eea592d"} 
Number of JSON entries not equal for element: '$.', expected '1' but was '4' 

解決方法はありますか?

よろしく オタク

+0

次回は時間がかかるし、彼らが読めるようにコードブロックで、あなたのコードスニペットを入れ、参照してくださいhttps://stackoverflow.com/editing-help #構文強調表示。これは多くの問題を理解するのに役立ちます。 – gucce

答えて

1

実際のJSONメッセージは、複数の要素(__vminValalarmName_id)を持っているためです。あなたの制御Jsonメッセージは単に要素alarmNameを定義します。 Citrus Jsonのメッセージバリデーターはデフォルトでこのstrictモードを使用していますので、すべての要素が予期される制御Jsonメッセージで定義されているかどうかを調べます。これがエラーを起こす理由です。

2つのオプションがあります。コントロールJsonメッセージのすべての不足要素を@[email protected]値で追加するか、Jsonメッセージバリデーターで厳密モードを無効にします。 2番目のオプションは、JSONメッセージのバリデータBeanを上書きすることによって行うことができます。

<bean id="defaultJsonMessageValidator" class="com.consol.citrus.validation.json.JsonTextMessageValidator"> 
    <property name="strict" value="false"/> 
</bean> 
+1

JPathを使用するとどうなりますか? – gucce

+0

実際に@gucceは良い点です!このオプションは最初の場所では全く有効なオプションでは私の心に来ていませんでした。コントロールメッセージのペイロードを使用する代わりに、validate( "$。alarmName"、 "@variable( 'apiVersion')@")で検証JsonPath式を使うだけで、 –

関連する問題