Java 如何在JSON模式中使用其中一个来验证POST和补丁请求?

Java 如何在JSON模式中使用其中一个来验证POST和补丁请求?,java,json,jsonschema,json-schema-validator,Java,Json,Jsonschema,Json Schema Validator,目前,我们正在使用一个模式文件,该文件包含两个模式中的一个:一个用于补丁请求,另一个用于POST请求。在Java代码中,我们检查请求中的id是否可用,然后检查其中一节中的第一个模式是否有任何错误消息 大概是这样的: processingReport.iterator().forEachRemaining(processingMessage -> { JsonNode json = processingMessage.asJson(); JS

目前,我们正在使用一个模式文件,该文件包含两个模式中的一个:一个用于补丁请求,另一个用于POST请求。在Java代码中,我们检查请求中的id是否可用,然后检查其中一节中的第一个模式是否有任何错误消息

大概是这样的:

        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可用时,它就可以从其中一个模式中选择正确的模式,或者有更好的方法来做到这一点


我知道一种选择是使用不同的json文件,但我们的技术经理宁愿将它们放在一个位置

oneOf
anyOf
子句可用于对条件约束建模。根据
id
属性的存在,以下架构将在修补程序或post架构上进行验证:

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

您的意思是根据属性中包含的值选择架构吗?然后看看这个:@jruizaranguren,它从类型中选择模式,但我的场景不同。在我的例子中,类型是相同的。(假设它始终是Company)但选择什么模式取决于属性“id”是否可用。我考虑过“依赖关系”,但是在y出现时,你只能说检查属性x。当显示id时,我们如何使用“依赖项”来表示选择此模式?你能给我举个可能的例子吗?JSON模式对我来说有点难理解