为什么JSON模式验证器抛出许多异常消息,而不是一个简单的验证失败原因?

wnrlj8wa  于 2023-03-04  发布在  其他
关注(0)|答案(1)|浏览(113)

模式:

{
    "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)来分析实际问题并总结异常消息?

z31licg0

z31licg01#

您收到多个错误的原因是因为存在多个错误。

  • /oneOf/0/oneOf/1都通过,这意味着/oneOf失败,因为它只有一个子模式有效。
  • /oneOf/2失败,因为z不在该示例中。您将因此收到错误。

我的猜测是,如果示例确实通过了验证,例如{"x": "foo"},您正在使用的实现将不会报告任何错误,或者在最详细的情况下,它将返回一个通过的总体结果,但仍然显示来自失败的oneOf子模式的错误,以便您可以看到哪个子模式通过以及其他子模式失败的原因。
你得到的是正确的。
如果你想要其他的东西,你可以问库的维护者或者在这里找到另一个。

相关问题