您不能在請求時對陣列項目應用通用基數約束。 但根據您的業務需求,您可以在以下三種替代方案上使用:
首先,如果foo
最多隻能運行一次,則可以考慮將其從數組中取出並添加爲可選屬性。
{
"type":"object",
"properties":{
"foo":{
"$ref" : "#/definitions/foo"
}
"otherItems" : {
"type" : "array",
"items" : {
"oneOf" : [{
"$ref" : "#/definitions/bar"
}, {
"$ref" : "#/definitions/baz"
}
]
},
"definitions" : {}
}
}
}
其次,如果不需要特定的順序,你也可以使用一個對象而不是數組的實現了類似的結構性制約因素:
{
"type" : "object",
"properties" : {
"foo" : {
"$ref" : "#/definitions/foo"
}
},
"additionalItems" : {
"oneOf" : [{
"$ref" : "#/definitions/bar"
}, {
"$ref" : "#/definitions/baz"
}
]
}
}
最後但並非最不重要的,如果你可以強制你的客戶當陣列發生時,發送foo
對象在第一個位置,那麼以下模式將與您最接近:
{
"type" : "array",
"items" : [{
"oneOf" : [{
"$ref" : "#/definitions/foo"
}, {
"$ref" : "#/definitions/bar"
}, {
"$ref" : "#/definitions/baz"
},
]
}
],
"additionalItems" : {
"oneOf" : [{
"$ref" : "#/definitions/bar"
}, {
"$ref" : "#/definitions/baz"
}
]
}
}