Я работаю с двумя микросервисами, используя Spring Cloud Contract . Один предоставляет свой контракт, а другой - его. В одном сценарии ответ поставщика совпадает с запросом.
Таким образом, контракт с поставщиком выглядит следующим образом:
Contract.make {
request {
method 'POST'
url '/provider/foo'
body(
"foo": $(regex("[a-zA-Z0-9]{20}"))
)
}
response {
status 200
body(
"fooResponse": fromRequest().body("\$.foo")
)
}
И сгенерированное отображение wiremock:
{
"id" : "a80c0871-f4c0-49e3-8cc1-94de39899669",
"request" : {
"url" : "/provider/foo",
"method" : "POST",
"bodyPatterns" : [ {
"matchesJsonPath" : "$[?(@.['foo'] =~ /[a-zA-Z0-9]{20}/)]"
} ]
},
"response" : {
"status" : 200,
"body" : "{\"fooResponse\":\"{{{jsonpath this '$.foo'}}}\"}",
"transformers" : [ "response-template" ]
},
"uuid" : "a80c0871-f4c0-49e3-8cc1-94de39899669",
"scenarioName" : "scenarioReturnSameAsRequest",
"requiredScenarioState" : "Started"
}
Но когда мой код вызывает провайдера с foo как любой текст, wiremock возвращает:
{
"fooResponse" : "{{{jsonpath this '$.foo'}}}"
}
Как создать контракт, который отвечает тем же параметрам, что и тело запроса?
Редактировать
Я попытался с фиксированным значением в ответе и отлично работает:
Contract.make {
request {
method 'POST'
url '/provider/foo'
body(
"foo": $(regex("[a-zA-Z0-9]{20}"))
)
}
response {
status 200
body(
"fooResponse": "fooValue"
)
}
Теперь возврат в каркас:
{
"fooResponse" : "fooValue"
}
Может быть, не поддерживается получение из запроса значения регулярного выражения?