Использование сложного JSON в Spring Cloud Contract Groovy 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"
            }
        ]
        )

Учитывая, что подобъекты заключены в фигурные скобки, Groovy думает, что он открывает / закрывает оператор / операцию (вроде как ...), но является частью тела JSON. Я пробовал использовать косую черту с тройной одинарной кавычкой ('' '/), но при этом тело обрабатывается как одна непрерывная строка без проверки отдельных атрибутов.

Вопрос в том, действительно ли существует escape-последовательность, которая игнорирует фигурные скобки, сохраняя иерархическую структуру тела.


person Andrew Reiplinger    schedule 04.10.2018    source источник


Ответы (1)


Используйте КВАДРАТНЫЕ КРОНШТЕЙНЫ для создания объектов (да, я знаю, что квадратные скобки в JSON предназначены для массивов, это странно, я не изобретал это)

Вы можете заключить имена полей в кавычки или без них, они оба работают.

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

Подождите? Как мне создать списки JSON, если квадратные скобки предназначены для объектов?

Двойные квадратные скобки. Шутки в сторону.

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

Как составить список целых чисел, например идентификаторов?

Честно говоря, еще не пробовал. Но я надеюсь, что если у вас нет имени поля внутри массива, Spring CC примет его за примитив, и он просто будет работать.

person Bradleo    schedule 26.06.2020