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

OpenAPI Generator 5.3.1生成int64类型时未生成pattern注解如何解决

问题说明

使用Swagger 2 + OpenAPI Generator 5.3.1生成Java实体类时,定义为integer/int64(映射为Long类型)的字段,即使配置了pattern、minLength、maxLength属性,也不会自动生成对应校验注解。

原Swagger配置

id:
 type: integer
 format: int64
 pattern: '^\d{16,19}$'
 minLength: 16
 maxLength: 19

当前生成的字段代码

@javax.annotation.Nonnull
  @NotNull
  @ApiModelProperty( required = true, )
  @JsonProperty(JSON_PROPERTY_ID)
  @JsonInclude(value = JsonInclude.Include.ALWAYS)

  public Long getId() {
    return id;
  }
根因

OpenAPI Generator 5.3.1内置的Java生成逻辑存在类型绑定限制:pattern、minLength、maxLength属于字符串类型的专属校验规则,默认只会给type: string的字段生成对应校验注解,数值类型(包括int64映射的Long)默认不会识别这几个属性生成注解。

解决方案

方案1:使用数值类型匹配的校验规则(推荐)

Long是数值类型,使用字符串长度、正则规则做校验本身语义不符,替换为数值范围约束即可让生成器自动生成校验注解,修改Swagger配置如下:

id:
  type: integer
  format: int64
  minimum: 1000000000000000  # 16位数字最小值
  maximum: 9999999999999999999 # 19位数字最大值

配置后生成的代码会自动带上JSR380标准的@Min、@Max注解,不需要额外修改生成器配置,运行时可直接生效。

方案2:自定义生成模板强制输出pattern注解

如果必须使用正则做校验,可通过自定义模板覆盖默认生成逻辑:

  • 从OpenAPI Generator 5.3.1的依赖包中提取默认的pojo.mustache实体模板文件
  • 修改模板中字段注解渲染的逻辑段,新增判断规则:当字段类型为Long、且schema中存在pattern配置时,额外输出@Pattern注解内容
  • 执行生成命令时添加-t <自定义模板目录路径>参数,指定生成器加载修改后的模板

注意:JSR380标准的@Pattern注解默认仅支持字符串类型校验,直接标注在Long字段上会导致运行时报错,需要额外自定义Long类型的正则校验器才能让规则生效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.18 16:15:44