Существуют некоторые возможности для сопоставления по пути json, но вы не обязательно используете его для сопоставления с явными значениями, а скорее для создания гибкой заглушки для потребителя с помощью регулярных выражений. Хотя есть некоторые возможности.
Таким образом, раздел body - это ваше тело запроса c с жестко закодированными значениями, а раздел bodyMatchers дает вам возможность сделать сопоставление заглушки со стороны потребителя более гибким.
Contract.make {
request {
method 'POST'
url '/some-url'
body ([
id: id
items: [
foo: foo
bar: bar
],
[
foo: foo
bar: foo
]
])
bodyMatchers {
jsonPath('$.id', byEquality()) //1
jsonPath('$.items[*].foo', byRegex('(?:^|\\W)foo(?:$|\\W)')) //2
jsonPath('$.items[*].bar', byRegex(nonBlank())) //3
}
headers {
contentType(applicationJson())
}
}
response {
status 200
}
}
Я ссылался на некоторые строки
1: «byEquality ()» в разделе bodyMatchers означает: входные данные от потребителя должны быть равны значению, указанному в теле для совпадения этого контракта / заглушки, другими словами должен быть "id".
2: Я не уверен, насколько хорошо будет работать решение // 1, когда свойство находится в списке, и вы хотите, чтобы заглушка была гибкой с количеством предоставленных элементов. Для этого я также включил это byRegex, что означает, что для любого элемента в списке свойство foo должно иметь в точности значение «foo». Тем не менее, я действительно не знаю, почему вы хотели бы сделать это.
3: Именно здесь bodyMatchers действительно наиболее полезны. Эта строка означает: соответствовать этому контракту, если каждая строка свойств в списке элементов является непустой строкой. Это позволяет вам иметь динамическую заглушку c с гибким размером списков / массивов.
Все условия в bodyMatchers должны быть выполнены для соответствия заглушке.