在Spring云契约Groovy契约中使用复杂JSON

在Spring云契约Groovy契约中使用复杂JSON,json,groovy,spring-cloud-contract,Json,Groovy,Spring Cloud Contract,我一直在想如何正确地实现Spring云契约验证器,但是我试图通过契约强制执行的JSON很复杂,我不确定如何在Groovy表示中处理它。JSON主体有时包含键的子对象,有时包含对象数组 response { status(200) headers { contentType applicationJson() } body( "attrbte1": 777310402, "attrbte2": 100, "at

我一直在想如何正确地实现Spring云契约验证器,但是我试图通过契约强制执行的JSON很复杂,我不确定如何在Groovy表示中处理它。JSON主体有时包含键的子对象,有时包含对象数组

    response {
    status(200)
    headers { contentType applicationJson() }
    body(
        "attrbte1": 777310402,    
        "attrbte2": 100,
        "attrbte3": "CAPSULE",
        "attrbte4": "01655",
        "attrbte5": "281604",
        "attrbte6": "28160420",
        "genericCodeNo": 16353,
        "stc": {
            "stcAttrbt1": 10000001600,
            "stcAttrbt2": "8875",
            "stcAttrbt3: "2008-08-04T00:00:00.000+0000",
            "stcAttrbt4": null
        },
        "gtc": {
            "gtcAttbt1": 10000000028,
            "gtcAttbt2": "0N",
            "gtcAttbt3": "2008-08-04T00:00:00.000+0000"
        },
        "etcs": [
            {
                "etcAttbt1": 530,
                "etcAttbt2": null,
                "etcAttbt3": null
            }
        ],
        "icds": [
            {
                "icdCode": "F31.3",
                "icdCode2": "F45.232"
            },
            {
                "icdCode": "F40.01",
                "icdCode2": "F44.2341"
            }
        ]
        )
鉴于子对象是花括号的,groovy认为它是在打开/关闭一个语句/操作,(有点…),但它是JSON主体的一部分。我尝试了三重单引号斜杠('''/),但它将主体视为一个连续字符串,而不检查单个属性


问题是,是否有一个转义序列会忽略花括号,同时保留主体的层次结构布局。

使用方括号来创建对象(是的,我知道在JSON中方括号用于数组,很奇怪,不是我发明的)

response {
    status(200)
    headers { contentType applicationJson() }
    body(**'''**
        "attrbte1": 777310402,    
        "attrbte2": 100,
        "attrbte3": "CAPSULE",
        "attrbte4": "01655",
        "attrbte5": "281604",
        "attrbte6": "28160420",
        "genericCodeNo": 16353,
        "stc": {
            "stcAttrbt1": 10000001600,
            "stcAttrbt2": "8875",
            "stcAttrbt3: "2008-08-04T00:00:00.000+0000",
            "stcAttrbt4": null
        },
        "gtc": {
            "gtcAttbt1": 10000000028,
            "gtcAttbt2": "0N",
            "gtcAttbt3": "2008-08-04T00:00:00.000+0000"
        },
        "etcs": [
            {
                "etcAttbt1": 530,
                "etcAttbt2": null,
                "etcAttbt3": null
            }
        ],
        "icds": [
            {
                "icdCode": "F31.3",
                "icdCode2": "F45.232"
            },
            {
                "icdCode": "F40.01",
                "icdCode2": "F44.2341"
            }
        ]**'''.toString()**
        )
您可以在字段名周围加引号,也可以不加引号,它们看起来都很有效

body([
    stringField1: value(regex(".*")),
    stringField2: value(regex(alphaNumeric()),
    innerObject1: [
        innerStringField1: "Hardcoded1",
        innerIntegerField1: anyInteger()
    ]
])
等等?如果方括号用于对象,那么如何制作JSON列表

双方括号。真的

body(
    [[
        stringFieldOfObjectInList: regex(".*")
    ]]
)
我如何制作一个整数列表,比如ID

老实说,我还没试过。但我希望,如果数组中没有字段名,SpringCC将假定它是一个原语,它将“正常工作”