2016-08-03 5 views
2

現在、oneOfと2つのスキーマを含むスキーマファイルを使用しています.1つはPATCH要求用、もう1つは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から正しいスキーマを選ぶか、それとももっと良い方法がありますか?

私は1つのオプションが別のjsonファイルを持っていることを知っていますが、私たちのテクニカルマネージャーはむしろ1つの場所に保管しています。

+0

を使用すると、プロパティに含まれる値に基づいてスキーマを選択することを意味しますか?それから、これを見てください:http://stackoverflow.com/questions/18375506/how-to-use-dependencies-in-json-schema-draft-04/18384131#18384131 – jruizaranguren

+0

@jruizarangurenそのタイプからスキーマを選択しますが、私はシナリオが異なります。私の場合、タイプは同じです。 (それはいつもCompanyだとしましょう)、どのスキーマを選択するかは、プロパティ 'id'を使用できるかどうかによって異なります。私は '依存関係'について考えましたが、yが提示されたときにのみチェックプロパティxと言うことができます。 idが与えられたときに、このスキーマを選択するために、どのように '依存関係'を使うことができますか?それが可能かどうかの例を教えてもらえますか? JSONスキーマはわかりにくいです – xbmono

答えて

1

oneOfおよびanyOf節を使用して、条件付き制約をモデル化することができます。次のスキーマは、id財産の有無に応じて、パッチまたはポストスキーマの上で検証します:

{ 
    "oneOf" : [{ 
      "$ref" : "/post_request_schema#" 
     }, { 
      "allOf" : [{ 
        "$ref" : "/patch_request_schema#" 
       }, { 
        "required" : ["id"] 
       } 
      ] 
     } 
    ] 
} 
関連する問題