目前我们使用的模式文件包含带有2个模式的 oneOf :一个用于PATCH请求,另一个用于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中选择正确的架构,或者有更好的方法可以做到这一点?
我知道一个选项是使用不同的json文件,但我们的技术经理宁愿将它们保存在一个位置。
答案 0 :(得分:2)
oneOf
和anyOf
子句可用于建模条件约束。以下模式将验证补丁或发布模式,具体取决于id
属性的存在:
{
"oneOf" : [{
"$ref" : "/post_request_schema#"
}, {
"allOf" : [{
"$ref" : "/patch_request_schema#"
}, {
"required" : ["id"]
}
]
}
]
}