我正在研究基于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()
}
}
我想要实现的是让'发送方'和'接收方'都为空。我可以定义两者的每个子字段为空(DSLoptional()),但是请求体可以像这样:
{sender:null, receiver:null}
我试着为每种可能性定义多个合同(一个都填满了,第二个是发件人:null,第三个是接收者:null,两个都是null)。在这种情况下,使用上述API存根定义的客户端WireMock不会将想要的存根与正确的请求相匹配——例如,当使用带有空发送者的request调用时,WireMock识别出与期望的发送者最接近的存根并返回404,忽略期望空发送者的合同定义。
是否有办法定义字段与内部结构为可空的?在文档中,我只看到了创建可空字段值的可能性,但没有看到整个结构。
如果一个字段可能是null
,您应该创建2个合约。1表示null
, 1表示非null
。