3

現在、2 つのスキーマを持つoneOfを含むスキーマ ファイルを使用しています。1つは PATCH 要求用、もう 1 つは POST 要求用です。Java コードでは、リクエストで id が使用可能かどうかを確認し、次に oneOf セクションの最初のスキーマにエラー メッセージがあるかどうかを確認します。

このようなもの:

        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 か所にまとめたいと考えています。

4

1 に答える 1

2

oneOfandanyOf句を使用して、条件付き制約をモデル化できます。id次のスキーマは、プロパティの存在に応じて、パッチまたはポスト スキーマを検証します。

{
    "oneOf" : [{
            "$ref" : "/post_request_schema#"
        }, {
            "allOf" : [{
                    "$ref" : "/patch_request_schema#"
                }, {
                    "required" : ["id"]
                }
            ]
        }
    ]
}
于 2016-08-04T07:38:09.970 に答える