Validate/Match JSON Wiremock 输入请求中的数字字段而非字符串
Validate/Match JSON field for number and not string in the input request in Wiremock
我正在尝试验证请求中的特定 json 字段 amount
是否包含数字而不是字符串
{
"request": {
"method": "POST",
"urlPath": "/charges",
"bodyPatterns" : [
{"matchesJsonPath" : "$[?(@.amount =~ /^[0-9]*$/i)]"}
]
}
现在请求 1 和请求 2 工作正常,请求 3 失败。但我预计 request2 也会失败,因为它是一个字符串而不是双引号中的数字。
请求 1,
{
"amount": 123,
}
请求 2,
{
"amount": "123",
}
请求 3,
{
"amount": "a123",
}
这可能吗?我在 wiremock 文档中看到
Since WireMock’s matching operators all work on strings,
the value selected by the JSONPath expression will be coerced to a string before the match is evaluated.
我找到了解决方法。
根据您提供的正则表达式,我看到 amount
字段不能有负值。
因此,在 matchesJsonPath 中,进行虚拟检查以确保该值大于或等于零。这将确保值 123 有效,但“123”将引发错误
您甚至不需要再使用正则表达式。
{
"request": {
"method": "POST",
"urlPath": "/charges",
"bodyPatterns" : [
{"matchesJsonPath" : "$[?(@.amount >= 0)]"}
]
}
我正在尝试验证请求中的特定 json 字段 amount
是否包含数字而不是字符串
{
"request": {
"method": "POST",
"urlPath": "/charges",
"bodyPatterns" : [
{"matchesJsonPath" : "$[?(@.amount =~ /^[0-9]*$/i)]"}
]
}
现在请求 1 和请求 2 工作正常,请求 3 失败。但我预计 request2 也会失败,因为它是一个字符串而不是双引号中的数字。
请求 1,
{
"amount": 123,
}
请求 2,
{
"amount": "123",
}
请求 3,
{
"amount": "a123",
}
这可能吗?我在 wiremock 文档中看到
Since WireMock’s matching operators all work on strings,
the value selected by the JSONPath expression will be coerced to a string before the match is evaluated.
我找到了解决方法。
根据您提供的正则表达式,我看到 amount
字段不能有负值。
因此,在 matchesJsonPath 中,进行虚拟检查以确保该值大于或等于零。这将确保值 123 有效,但“123”将引发错误
您甚至不需要再使用正则表达式。
{
"request": {
"method": "POST",
"urlPath": "/charges",
"bodyPatterns" : [
{"matchesJsonPath" : "$[?(@.amount >= 0)]"}
]
}