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
相关产品推荐
相关产品推荐

