模式:
{
"type": "object",
"additionalProperties": false,
"properties": {
"x": {"type": "string"},
"y": {"type": "string"},
"z": {"type": "string"}
},
"oneOf":[{"required": ["x"]}, {"required": ["y"]}, {"required": ["z"]}]
}
输入Json:
{
"x":"sample",
"y":"sample"
}
预期的实际错误和异常消息为:"JSON对多个模式有效",但除此之外,"找不到所需的键[z]"也会被抛出。我检查了更多的3个库,所有库都是这样做的。
有没有理由抛出多个这样的消息?有没有任何库(java)来分析实际问题并总结异常消息?
1条答案
按热度按时间z31licg01#
您收到多个错误的原因是因为存在多个错误。
/oneOf/0
和/oneOf/1
都通过,这意味着/oneOf
失败,因为它只有一个子模式有效。/oneOf/2
失败,因为z
不在该示例中。您将因此收到错误。我的猜测是,如果示例确实通过了验证,例如
{"x": "foo"}
,您正在使用的实现将不会报告任何错误,或者在最详细的情况下,它将返回一个通过的总体结果,但仍然显示来自失败的oneOf
子模式的错误,以便您可以看到哪个子模式通过以及其他子模式失败的原因。你得到的是正确的。
如果你想要其他的东西,你可以问库的维护者或者在这里找到另一个。