如何在OpenAPI(Swagger)中定义支持空字符串或邮箱格式的属性
你的示例配置有问题,anyOf的每一项必须是完整的Schema对象,不能直接嵌套format。要实现“存在时验证邮箱格式、空字符串不校验”的需求,可以用下面两种正确的OpenAPI配置方式:
方式一:使用anyOf拆分规则
email: type: string anyOf: - format: email - pattern: '^$'
这个配置明确指定字段值要么是符合邮箱格式的字符串,要么是空字符串,完全匹配你的需求。
方式二:用单一正则覆盖两种情况
如果你想把规则合并成一个正则表达式,也可以这么写:
email: type: string pattern: '^$|^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
正则里的^$匹配空字符串,后半段则是标准的邮箱格式校验规则,两者用|分隔表示二选一。
需要注意的是,OpenAPI的format: email遵循RFC 5322规范,不同的API校验工具对这个格式的实现可能略有差异,但上面两种配置都能满足你的核心需求。
内容的提问来源于stack exchange,提问作者troglodyte07
相关产品推荐
相关产品推荐

