如何约束Ballerina中JsonSchema与ArraySchema记录的'type字段取值?
Ballerina记录类型字段的预定义值约束方法
下面是几种约束JsonSchema和ArraySchema中'type字段值的实用方法:
方法1:使用类型约束表达式
直接在字段类型后添加where约束,编译期即可校验非法值,实现方式最简洁:
type JsonSchema record{| string 'type where 'type == "object"; json properties; |}; type ArraySchema record{| string 'type where 'type == "array"; json items; |};
当尝试给JsonSchema的'type传入非"object"字符串时,编译器会直接抛出错误,确保字段值符合要求。
方法2:使用枚举类型
先定义包含允许值的枚举,再将字段类型绑定到对应枚举成员,既约束值范围,又提升代码可读性与扩展性:
// 定义Schema类型枚举 type SchemaType enum { OBJECT = "object", ARRAY = "array" }; type JsonSchema record{| SchemaType 'type = SchemaType.OBJECT; json properties; |}; type ArraySchema record{| SchemaType 'type = SchemaType.ARRAY; json items; |};
这里给字段设置了默认值,用户显式赋值时只能传入枚举成员对应的有效值。后续若需新增其他Schema类型(如"string"),只需扩展枚举即可,维护成本更低。
方法3:使用只读默认字段
如果希望'type字段固定为预定义值、不允许用户修改,可以添加readonly修饰符并设置默认值:
type JsonSchema record{| readonly string 'type = "object"; json properties; |}; type ArraySchema record{| readonly string 'type = "array"; json items; |};
这种方式下,用户无法显式修改'type字段,该字段始终保持默认的预定义值,彻底杜绝非法赋值的可能。
内容的提问来源于stack exchange,提问作者Kavindu Gimhan Zoysa
相关产品推荐
相关产品推荐

