Mule中JSON Schema Validator未按if-then-else规则校验schema问题
问题根因排查
- 第一优先级排查
$schema配置错误:Draft 07 版本JSON Schema的官方标准声明地址为http://json-schema.org/draft-07/schema#,你当前的配置缺少路径分隔符,误写为draft-07schema#,会导致校验器无法正确识别Schema版本。而if-then-else是Draft 07才正式引入的语法,版本识别错误会直接导致条件校验块被全局忽略,这是你遇到问题的最常见原因。 - 可选补充必填校验规则:如果你要求
postal_code为必传字段,需要在then和else块中分别添加"required": ["postal_code"]配置,否则当请求不传该字段时也会通过校验,不符合大多数业务场景的预期。 - 若修正
$schema后问题仍存在,才说明你使用的JSON校验器不支持Draft 07的条件语法,可更换支持Draft 07及以上版本的校验器解决。
修正后的完整Schema示例
{ "$schema": "http://json-schema.org/draft-07/schema#", "description": "Create Orders Schema", "type": "object", "properties": { "street_address": { "type": "string" }, "country": { "default": "United States of America", "enum": ["United States of America", "Canada"] } }, "if": { "properties": { "country": { "const": "United States of America" } } }, "then": { "properties": { "postal_code": { "pattern": "[0-9]{5}(-[0-9]{4})?" } }, "required": ["postal_code"] }, "else": { "properties": { "postal_code": { "pattern": "[A-Z][0-9][A-Z] [0-9][A-Z][0-9]" } }, "required": ["postal_code"] } }
修正后传入你给出的无效payload,校验器会正确触发Canada对应的邮编格式校验,返回格式不匹配的错误。
内容的提问来源于stack exchange,提问作者user12277274
相关产品推荐
相关产品推荐

