You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为GraphQL枚举(ENUM)设置@Pattern指令?

GraphQL 枚举类型配置 @Pattern 指令的实操方法

首先明确基础规则:@Pattern 指令默认仅面向 String 类型设计,原生不支持直接作用在 ENUM 枚举类型上。枚举本身的固定可选值属性已经自带取值约束,仅在需要对枚举值命名规则、可查询范围做额外正则校验的特殊场景下,才需要额外配置@Pattern。

步骤1:扩展@Pattern指令的适用范围

你需要先修改@Pattern的指令定义,在适用范围中新增ENUM、ARGUMENT_DEFINITION(可根据实际使用场景增减),示例指令定义代码如下:

# 扩展后的@Pattern指令,支持作用在枚举类型、字段参数、输入字段上
directive @Pattern(regexp: String!, message: String) on ENUM | FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION

步骤2:按需给枚举/参数挂载指令

场景A:校验枚举值的命名规范(构建时生效)

如果你需要约束当前枚举下所有枚举值的命名规则,直接在枚举定义上挂载@Pattern即可,比如要求所有枚举值必须为大写字母+下划线的格式:

@Pattern(regexp: "^[A-Z][A-Z0-9_]*$", message: "枚举值需符合大写+下划线的命名规范")
enum OrderStatus {
  CREATED
  PAID
  SHIPPED
  CANCELLED
}

场景B:校验运行时传入的枚举取值范围

如果你需要限制接口调用时可传入的枚举值范围,直接在对应参数/输入字段上挂载@Pattern即可,比如仅允许查询已创建、已支付状态的订单:

type Query {
  getOrder(
    orderId: ID!
    status: OrderStatus @Pattern(regexp: "^(CREATED|PAID)$", message: "仅支持查询已创建、已支付的订单")
  ): Order
}

注意:非必要场景不建议给枚举加@Pattern约束,枚举本身的取值校验已经能覆盖绝大多数需求,额外加正则校验会增加不必要的运行时开销。

内容的提问来源于stack exchange,提问作者raji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 09:15:03