2016-06-22 48 views

回答

0

您不能在請求時對陣列項目應用通用基數約束。 但根據您的業務需求,您可以在以下三種替代方案上使用:

首先,如果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" 
      } 
     ] 
    } 

} 
相關問題