使用com.github.fge.jsonschema校验JSON时遇InvalidSchemaException问题排查
问题根源与解决方案
这个问题的核心在于你使用的json-schema-validator版本(2.2.10)对JSON Schema Draft-07的支持存在局限性,具体是对required关键字的校验逻辑不符合Draft-07规范。
为什么会报错?
JSON Schema Draft-07明确允许required字段设为空数组(表示没有必填属性),但你用的旧版fge库有个强制要求:如果Schema中出现required关键字,对应的数组必须至少包含一个元素。这就是错误日志里提示"array must have at least one element"的原因。而在线校验器一般采用最新的规范实现,所以能正常识别空数组的required。
两种解决办法
1. 移除空的required字段(最简单直接)
既然你没有需要强制必填的属性,直接删掉Schema中的"required": []这一行即可。修改后的Schema如下:
{ "$schema": "http://json-schema.org/draft-07/schema#", "title": "Team data", "description": "Validation schema", "type": "object", "additionalProperties": false, "properties": { "name": { "type": "string", "minLength": 2, "maxLength": 255, "description": "Name" } } }
这样修改后,旧版库就能正常校验你的JSON内容{"name" : "name"}了。
2. 升级库版本(保留required空数组写法)
如果你需要保留required: []的写法来明确表示无必填属性,可以尝试升级fge的json-schema-validator到更晚的版本(注意该库已停止维护,最新稳定版是2.2.14)。不过需要测试新版本是否完全支持Draft-07的这个特性。如果升级后仍有问题,考虑替换为更活跃的JSON Schema校验库,比如org.everit.json.schema或com.networknt/json-schema-validator,它们对最新规范的支持更完善。
内容的提问来源于stack exchange,提问作者user9458184
相关产品推荐
相关产品推荐

