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

标签 json groovy spring-cloud-contract

我一直在思考如何正确实现 Spring Cloud Contract Verifier,但是我试图通过契约(Contract)强制执行的 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 中的方括号用于数组,这很奇怪,不是我发明的)
您可以使用或不使用引号将字段名称括起来,它们似乎都有效。

body([
    stringField1: value(regex(".*")),
    stringField2: value(regex(alphaNumeric()),
    innerObject1: [
        innerStringField1: "Hardcoded1",
        innerIntegerField1: anyInteger()
    ]
])
等待?如果方括号用于对象,我该如何制作 JSON 列表?
双方括号。严重地。
body(
    [[
        stringFieldOfObjectInList: regex(".*")
    ]]
)
如何制作整数列表,例如 id?
说实话,还没试过。但是我希望如果您在数组中没有字段名称,Spring CC 将假定它是一个原始类型并且它会“正常工作”。

关于json - 在 Spring Cloud Contract Groovy 合约中使用复杂的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52650130/

相关文章:

javascript - 如何将此字符串解析为数组?

hibernate - 如何在grails中使用executeQuery()进行多态查询?

json - Youtube数据Api乘以2您的查询

c# - 读取 json 文件并使用 JSON.NET 更改它

java - java和groovy中的内部代码表示

java - 在 Groovy 中将可变长度字符串散列为 12 位数字的一种方法函数

java - Spring Cloud Contract 不检查消费者/提供者是否匹配

spring-boot - Spring Cloud Contract Verifier - body 匹配

java - spring cloud contract dsl 指定路径参数

javascript - JSON 解析器如何编码不在基本多语言平面中的 unicode 字符?