使用@variable()@ matcher时出现Json错误

问题描述:

我有一个场景,在下一个请求中必须使用特定的响应数据。 我用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://*.com/editing-help:第二个选项可以通过覆盖JSON的消息验证豆完成#语法突出。这对理解问题有很大的帮助。 – gucce

这是因为实际的Json消息有多个元素(__vminValalarmName_id)。您的控制Json消息只是定义了元素alarmName。 Citrus Json消息验证程序默认使用此严格模式,因此它将计数并检查所有元素是否在预期的控制Json消息中定义。这就是你得到错误的原因。

这里有两个选项。或者将控件Json消息中的所有缺失元素与@[email protected]值相加或在Json消息验证程序中禁用严格模式。

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

使用JPath怎么样? – gucce

+0

@ gucce其实好点!尽管这个选项并没有出现在我的脑海里,但是我完全有效的选择。而不是使用控制消息有效载荷,您可以使用验证JsonPath表达式与“验证(”$。alarmName“,”@variable('apiVersion')@“)' –