我一直在努力地思考如何正确实现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主体的一部分。我已经尝试过使用三重单引号斜杠('''/),但是将主体视为一个连续的字符串,而无需检查各个属性。
问题确实是,是否存在一个转义序列,该序列将忽略花括号,同时保留身体的层次结构。
答案 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()**
)