2017-02-22 2 views
1

패키지 express-jsonschema을 사용하여 요청 본문의 유효성을 검사하고 있습니다.'oneOf'가 포함 된 JSON SCHEMA의 Badrequest

내 스키마는 다음과 같습니다

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

} 

내 요청의 본문입니다 :이 예 Example JSON SCHEMA을 읽고,

{ 
"one": "asdf" 

} 

내 요청의 결과가 BadRequest이지만, 내 코드 나던. 도움 주셔서 감사합니다.

답변

1

귀하의 요청은 문자열이 아닌 속성이있는 개체입니다. 따라서 각각의 정의 (또는 적어도 "one"의 유형)의 정의는 문자열이 아닌 속성이있는 객체 여야합니다.

이 귀하의 요청에 대해 유효한 스키마이며, (충분한 정보를 확인 할 수없는) 무엇을 당신이하려고 수 있습니다 :

{ 
    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 \": indices 0 and 1'에서 하나 이상의 스키마에 대해 데이터가 유효합니다. 저는 그 몸이'{one : 'string'} 또는 {two : 'string} 또는 {three :'string '}'이 되길 원합니다. 이 세 키워드 중 하나만 허용했습니다. – tipiwiny

+0

이 유효성 검사기를 사용하여 http://www.jsonschemavalidator.net/을 확인했으며이 세 가지 ('string', two : 'string'및 'string ') 다른 키워드에는 해당되지 않음 – Pedro