Как указать необязательное свойство Date в весеннем облачном контракте?

Я пытаюсь использовать весенний облачный контракт. Я пишу спецификацию тела JSON, и мне нужно, чтобы свойство Date было необязательным. Когда я указываю в groovy dsl:

"processingDate": $(consumer(optional(anyDate())), producer(anyDate())),

это не удается:

Exception in thread "main" Assertion failed: 

assert testSide ==~ Pattern.compile(stubSide.optionalPattern())
       |        |           |       |        |
       |        false       |       |        (org.springframework.cloud.contract.spec.internal.ClientDslProperty(DslProperty(clientValue:(\d\d\d\d)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01]), serverValue:2016-06-16)))?
       |                    |       (org.springframework.cloud.contract.spec.internal.ClientDslProperty(DslProperty(clientValue:(\d\d\d\d)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01]), serverValue:2016-06-16)))?
       |                    (org.springframework.cloud.contract.spec.internal.ClientDslProperty(DslProperty(clientValue:(\d\d\d\d)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01]), serverValue:2016-06-16)))?
       org.springframework.cloud.contract.spec.internal.ClientDslProperty(DslProperty(clientValue:(\d\d\d\d)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01]), serverValue:2011-01-11))

Однако он работает при использовании optional вместе с регулярным выражением:

"processingDate": $(consumer(optional(regex(isoDate()))), producer(LocalDateTime.now().format(DateTimeFormatter.ISO_DATE))),

но, очевидно, я не хочу использовать такое обходное решение для каждого необязательного поля.

Спасибо!


person Martin Kalina    schedule 13.07.2018    source источник
comment
Вы можете поделиться здесь своим groovy файлом контракта?   -  person Yogendra Mishra    schedule 14.07.2018
comment
Первый пример кода выше - это связанная строка из моего отличного контракта.   -  person Martin Kalina    schedule 16.07.2018


Ответы (2)


Кажется, добавление префикса regex на стороне consumer подойдет. Просто попробуйте изменить

"processingDate": $(consumer(optional(anyDate())), producer(anyDate())), to

"processingDate": $(consumer(optional(regex(anyDate()))), producer(anyDate())),

OR

to "processingDate": $(consumer(optional(regex(isoDate()))), producer('2016-06-16')),

для получения подробной информации проверьте spring- cloud-contract_optional_parameters

person Yogendra Mishra    schedule 16.07.2018

anyDate() следует использовать прямо так:

"processingDate": ${anyDate()}

если вам нужно регулярное выражение, используйте isoDate(). Это разница между использованием делегатов org.springframework.cloud.contract.spec.internal.PatternValueDslProperty и org.springframework.cloud.contract.spec.internal.RegexPatterns

person Marcin Grzejszczak    schedule 16.07.2018