我正在开发基于Spring Cloud的微服务,通过Spring Cloud合同验证服务之间的客户端/API。WireMock用于客户端服务端测试服务API存根。Spring Cloud的版本为2020.0.2。我有以下Groovy合同定义:
Contract.make {
description "Nullable sender & receiver API contract"
request {
method POST()
url value(consumer(regex('/message')))
headers {
contentType(applicationJson())
header("x-channelId", anyNonBlankString())
}
body(
sender: [
toEmail : anyEmail(),
firstName : anyNonBlankString(),
lastName : anyNonBlankString()
],
receiver: [
toEmail : anyEmail(),
firstName : anyNonBlankString(),
lastName : anyNonBlankString()
]
)
}
response {
status CREATED()
}
}
我想实现的是让“发送方”和“接收方”都可以为空。我可以定义两者的每个子字段为nullable(DSL可选()),但请求体可以如下所示:
{发送者:空,接收者:空}
我尝试为每种可能性定义多个合约(一个包含两个已填充的合约,第二个包含sender: null,第三个包含收件人:null,两者均为null)。在这种情况下,使用上述定义进行API存根的客户端服务端WireMock不会将所需存根与正确的请求匹配-例如,当使用空发件人的请求调用时,WireMock将其标识为与预期发件人最接近的存根并返回404,忽略期望空发件人的合约定义。
有没有办法将内部结构的字段定义为可空的?在留档中,我只看到了使可空字段值的可能性,但没有看到整个结构。
如果一个字段可能是null
,您应该创建2个合约。1个是null
,1个不是null
。