基于 JSON 路径与 WireMock 中的逻辑运算符匹配 JSON 请求正文
Matching JSON request body based on JSON Path with logical operators in WireMock
在 WireMock 中,我尝试将基于 JSON 正文的请求与路径匹配器匹配,如下所示。但是 matchesJsonPath
表达式中似乎不支持逻辑运算符。
这个理解对吗?可能的替代解决方案是什么?任何帮助将不胜感激,谢谢!
...
"request": {
"url": "/mock/score",
"method": "PUT",
"bodyPatterns": [
{
"matchesJsonPath": "$[?(@.code == '123')]"
},
{
"matchesJsonPath": "$[?(@.amnt < '200000')]"
}
]
}
...
您的假设不正确。您可以在 JSONPath 过滤器中使用运算符。您可能会 运行 遇到问题,因为在 amnt
上检查的值是一个字符串。以下应该有效。
...
{
"matchesJsonPath": "$[?(@.amnt < 20000)]"
}
...
这当然要求在正文中传递的值是数字类型而不是字符串本身。
{
"amnt": 20000 // correct format
"amnt": "20000" // incorrect format
}
如果您的 amnt
值是一个字符串,您可能必须 write a custom matcher 可以解析正文并将字符串值转换为数字(或 java 等效数据类型)
在 WireMock 中,我尝试将基于 JSON 正文的请求与路径匹配器匹配,如下所示。但是 matchesJsonPath
表达式中似乎不支持逻辑运算符。
这个理解对吗?可能的替代解决方案是什么?任何帮助将不胜感激,谢谢!
...
"request": {
"url": "/mock/score",
"method": "PUT",
"bodyPatterns": [
{
"matchesJsonPath": "$[?(@.code == '123')]"
},
{
"matchesJsonPath": "$[?(@.amnt < '200000')]"
}
]
}
...
您的假设不正确。您可以在 JSONPath 过滤器中使用运算符。您可能会 运行 遇到问题,因为在 amnt
上检查的值是一个字符串。以下应该有效。
...
{
"matchesJsonPath": "$[?(@.amnt < 20000)]"
}
...
这当然要求在正文中传递的值是数字类型而不是字符串本身。
{
"amnt": 20000 // correct format
"amnt": "20000" // incorrect format
}
如果您的 amnt
值是一个字符串,您可能必须 write a custom matcher 可以解析正文并将字符串值转换为数字(或 java 等效数据类型)