2017-02-22 60 views
1

我正在使用包express-jsonschema來驗證請求的正文。JSON SCHEMA的Badrequest與'oneOf'

我的模式是:

{ 
    type: 'object', 
    oneOf: [ 
    { $ref: "#/definitions/one" }, 
    { $ref: "#/definitions/two" }, 
    { $ref: "#/definitions/three" } 
    ], 
    definitions: { 
    one: { 
    type: 'string' 
    }, 
    two: { 
    type: 'string' 
    } 
    three: { 
    type: 'string' 
    } 

} 

我的請求的主體是:

{ 
"one": "asdf" 

} 

我的請求的結果是錯誤請求,我看了這個例子Example JSON SCHEMA,但我的代碼不工作。 感謝您的幫助。

回答

1

您的請求是一個帶有屬性的對象,而不是字符串。所以每個定義(或者至少是「一」的)類型的定義都應該是一個帶有屬性的對象,而不是一個字符串。

這是一個有效的模式爲您的要求,可能是你正在做什麼(沒有足夠的信息,以確保):

{ 
    type: 'object', 
    oneOf: [ 
    { $ref: "#/definitions/one" }, 
    { $ref: "#/definitions/two" }, 
    { $ref: "#/definitions/three" } 
    ], 
    definitions: { 
    one: { 
    type: 'object', 
    properties: { 
     one: { 
      required: true, 
      type: "string" 
     } 
     } 
    }, 
    two: { 
    type: 'object', 
    properties: { 
     two: { 
      required: true, 
      type: "string" 
     } 
     } 
    }, 
    three: { 
    type: 'object', 
    properties: { 
     three: { 
      required: true, 
      type: "string" 
     } 
     } 
    } 
    } 
} 
+0

謝謝!我提供了你的代碼,但是現在,我收到了一個錯誤:'數據對來自\「oneOf \」的多個模式有效:索引0和1'。我希望這個主體是:'{one:'string'}或{two:'string}或{three:'string'}''。只有它允許這三個關鍵字之一 – tipiwiny

+0

我使用這個驗證器來檢查http://www.jsonschemavalidator.net/,它驗證罰款這三個(一個:'字符串',兩個:'字符串'和三個':字符串')而不是其他任何關鍵字 – Pedro