提问者:小点点

验证/匹配JSON字段的数字,而不是字符串在输入请求在Wiremck


我正在尝试验证请求中的特定json字段数量以具有数字而不是字符串

{
  "request": {
    "method": "POST",
    "urlPath": "/charges",
    "bodyPatterns" : [
      {"matchesJsonPath" : "$[?(@.amount =~ /^[0-9]*$/i)]"}
    ]
}

现在请求1和请求2工作正常,请求3失败。但我预计request est2也会失败,因为它是一个字符串,而不是双引号中的数字。

请求1,

{
    "amount": 123,
}

请求2,

{
    "amount": "123",
}

请求3,

{
    "amount": "a123",
}

这可能吗?我在wiretck文档里看到的

    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.

共1个答案

匿名用户

我找到了一个变通方法。

根据您提供的正则表达式,我看到金额字段不能有负值。

因此,在matchesJsonPath中,进行虚拟检查,检查该值是否大于或等于零。这将确保值123可以工作,但“123”会抛出错误

你甚至不需要再使用正则表达式了。

{
  "request": {
    "method": "POST",
    "urlPath": "/charges",
    "bodyPatterns" : [
      {"matchesJsonPath" : "$[?(@.amount >= 0)]"}
    ]
}