2016-08-03 50 views
2

目前我們使用的模式文件包含oneOf和2個模式:一個用於PATCH請求,一個用於POST請求。在Java代碼中,我們檢查請求中的id是否可用,然後檢查oneOf節中是否有第一個模式的錯誤消息。如何在JSON模式中使用oneOf來驗證POST和PATCH請求?

事情是這樣的:

 processingReport.iterator().forEachRemaining(processingMessage -> { 
     JsonNode json = processingMessage.asJson(); 

     JSONObject reports = new JSONObject(json.get("reports").toString()); 
     logger.debug("Schema validation: {}", reports.toString()); 
     //Seems always has 2 reports. 
     String reportIdentifier = isCreate ? "/properties/data/oneOf/0" : "/properties/data/oneOf/1"; 
     JSONArray errorsArray = new JSONArray(reports.get(reportIdentifier).toString()); 

     //Do something with the error here 

    }); 

但這似乎不是我的權利。有什麼方法可以在模式本身中進行管理,所以當id可用時,它會從oneOf中選擇正確的模式,或者有更好的方法來實現它?

我知道一個選項會有不同的json文件,但我們的技術經理寧願將它們放在一個地方。

+0

您是不是要根據屬性中包含的值選擇模式?然後看看這個:http://stackoverflow.com/questions/18375506/how-to-use-dependencies-in-json-schema-draft-04/18384131#18384131 – jruizaranguren

+0

@jruizaranguren從類型中選擇模式,但我的情況是不同的。在我的情況下,類型是相同的。 (假設它總是公司),但是選擇哪個模式取決於屬性'id'是否可用。我想過'依賴關係',但是隻有在y出現時才能說檢查屬性x。我們如何使用'依賴關係'來表示在id出現時選擇這個模式?你能給我舉個例子嗎? JSON模式對我來說有點難理解 – xbmono

回答

1

oneOfanyOf子句可用於模擬條件約束。以下模式將根據修補程序或帖子模式驗證屬性:

{ 
    "oneOf" : [{ 
      "$ref" : "/post_request_schema#" 
     }, { 
      "allOf" : [{ 
        "$ref" : "/patch_request_schema#" 
       }, { 
        "required" : ["id"] 
       } 
      ] 
     } 
    ] 
}