提问者:小点点

如何定义请求体对象属性为空在Spring云合同GroovyDSL合同定义?


我正在开发基于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,忽略期望空发件人的合约定义。

有没有办法将内部结构的字段定义为可空的?在留档中,我只看到了使可空字段值的可能性,但没有看到整个结构。


共1个答案

匿名用户

如果一个字段可能是null,您应该创建2个合约。1个是null,1个不是null