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)]"}
    ]
}