Проверить / сопоставить поле JSON для числа, а не строки во входном запросе в Wiremock

Я пытаюсь проверить конкретное поле json amount в запросе, чтобы иметь номер, а не строку

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

Теперь request1 и request2 работают нормально, а request3 не работает. Но я ожидаю, что request2 также потерпит неудачу, потому что это строка, а не число, поскольку оно заключено в двойные кавычки.

Запрос 1,

{
    "amount": 123,
}

Запрос 2,

{
    "amount": "123",
}

Запрос 3,

{
    "amount": "a123",
}

Это возможно?. Я вижу в документации по прототипу

    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.

person firstpostcommenter    schedule 26.12.2020    source источник


Ответы (1)


Я нашел обходной путь.

В соответствии с указанным вами регулярным выражением я вижу, что поле amount не может иметь отрицательных значений.

Итак, в matchJsonPath сделайте фиктивную проверку, что значение больше или равно нулю. Это гарантирует, что значение 123 будет работать, но 123 выдаст ошибку.

Вам даже не нужно больше использовать регулярное выражение.

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