在Spring Cloud Contract Groovy合约中使用复杂JSON

时间:2018-10-04 15:12:58

标签: json groovy spring-cloud-contract

我一直在努力地思考如何正确实现Spring Cloud Contract Verifier,但是我试图通过合同强制执行的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"
            }
        ]
        )

鉴于子对象是花括号的,因此常规认为它正在打开/关闭一条语句/操作(有点叫...),但它是JSON主体的一部分。我已经尝试过使用三重单引号斜杠('''/),但是将主体视为一个连续的字符串,而无需检查各个属性。

问题确实是,是否存在一个转义序列,该序列将忽略花括号,同时保留身体的层次结构。

2 个答案:

答案 0 :(得分:2)

使用SQUARE BRACKETS制作对象(是的,我在JSON方括号中知道是用于数组的,这很奇怪,我没有发明它)

您可以在字段名前后加上引号或引号,它们似乎都起作用。

body([
    stringField1: value(regex(".*")),
    stringField2: value(regex(alphaNumeric()),
    innerObject1: [
        innerStringField1: "Hardcoded1",
        innerIntegerField1: anyInteger()
    ]
])

等等吗?如果方括号是对象,我该如何创建JSON列表?

双方括号。认真地。

body(
    [[
        stringFieldOfObjectInList: regex(".*")
    ]]
)

如何创建一个整数列表,例如id?

老实说,还没有尝试过。但是我希望,如果您在数组中没有字段名,Spring CC会假设它是一个原语,并且会“正常工作”。

答案 1 :(得分:-1)

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()**
        )