You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pact(pact-jvm-consumer)的Lambda DSL中建模命名数组与对象

Pact Lambda DSL: 搞定命名数组、嵌套对象及多元素字符串数组建模

针对你给出的JSON结构,我整理了对应的Lambda DSL实现代码,同时逐个解决你提出的三个问题:

完整的DSL代码实现

PactDslJsonBody body = new PactDslJsonBody()
    // 解决问题1:声明命名数组Inventory,包含单元素对象
    .arrayNamed("Inventory")
        .object()
            // 命名对象Car
            .object("Car")
                .stringValue("gearbox", "automatic")
                .numberValue("ProductId", 30212)
            .closeObject()
            // 解决问题2:声明命名对象Camera,内部包含Conditions数组
            .object("Camera")
                .numberValue("EndPrice", 1235)
                // 解决问题3:在命名数组Conditions中声明两个示例字符串值
                .arrayNamed("Conditions")
                    .stringValue("FaultyButtons")
                    .stringValue("FaultyCasing")
                .closeArray()
                .stringValue("ModelId", "650")
            .closeObject()
        .closeObject()
    .closeArray()
    .booleanValue("IsSuccess", true)
    .stringValue("Info", "Ok");

逐个问题拆解说明

  • 问题1:声明命名数组Inventory
    使用.arrayNamed("Inventory")创建指定名称的数组,因为数组是单元素结构,所以在数组内部调用.object()定义数组里的唯一对象,再在这个对象中嵌套Car和Camera两个命名对象(通过.object("Car")和.object("Camera")实现)。

  • 问题2:声明包含数组的命名对象Camera
    先通过.object("Camera")创建命名对象,在这个对象内部,用.arrayNamed("Conditions")定义Conditions数组,后续就可以往这个数组里添加元素了。

  • 问题3:在命名数组中添加两个示例字符串
    在Conditions数组的代码块里,直接连续调用.stringValue()添加两个字符串示例值;如果需要更灵活的契约匹配(比如允许任意格式的字符串),也可以用.stringMatcher(".+", "FaultyButtons")和.stringMatcher(".+", "FaultyCasing")替代,具体根据你的校验需求调整。

需要注意的是,每打开一个arrayNamed或object,都要记得用closeArray()或closeObject()闭合,保证DSL结构的正确性。

内容的提问来源于stack exchange,提问作者Mattias Malmgren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:51:28