Поставщик Spring Cloud Contract возвращает то же, что и запрос - PullRequest
0 голосов
/ 10 сентября 2018

Я работаю с двумя микросервисами, используя 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"
}

Может быть, не поддерживается получение из запроса значения регулярного выражения?

Ответы [ 2 ]

0 голосов
/ 17 июля 2019

Однажды у меня была такая же проблема. Вы можете попробовать использовать value() так:

"fooResponse": value(fromRequest().body('$.foo'))
0 голосов
/ 11 сентября 2018

Я думаю, что отображение должно содержать request.body вместо this. Также мне интересно, если вам нужно использовать 3 раза { или просто 2 раза. Или вам нужно избежать этого?

Возможное отображение:

"response" : {
  "status" : 200,
  "body" : "{\"fooResponse\":\"{{jsonpath request.body '$.foo'}}\"}",
  "transformers" : [ "response-template" ]
},

См. Также главу JSONPath helper на http://wiremock.org/docs/response-templating

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...