如何通过openapi-generator-cli从OpenAPI YAML生成带Lombok注解及Javax校验注解的Java POJO模型?
如何通过openapi-generator-cli从OpenAPI YAML生成带Lombok注解及Javax校验注解的Java POJO模型?
我之前也碰到过一模一样的问题——明明在命令里加了lombok=true和useBeanValidation=true,生成的POJO却还是光秃秃的,连@Data或者@NotNull都看不到。结合你的场景,我来一步步帮你解决:
问题出在哪?
你之前的命令大部分参数都没问题,但有两个关键疏漏:
- 现在新版本的openapi-generator默认用Jakarta Validation(也就是
jakarta.validation.constraints下的注解),而不是你需要的旧版Javax校验包,没指定切换参数的话自然不会生成Javax注解 - 虽然加了
lombok=true,但参数传递的细节或者生成器默认行为没触发Lombok注解的正确生成
修正后的生成命令
直接用下面这个命令替换你之前的,就能生成完全符合要求的POJO:
openapi-generator-cli generate \ -i ./review-service.yaml \ -o review-models \ -g java \ --enable-post-process-file \ --type-mappings DateTime=java.time.OffsetDateTime,Date=java.time.LocalDate \ --import-mappings DateTime=java.time.OffsetDateTime,Date=java.time.LocalDate \ --additional-properties \ lombok=true, \ useBeanValidation=true, \ dateLibrary=java8, \ interfaceOnly=true, \ validationApi=javax.validation, \ validationPackage=javax.validation.constraints, \ builder=true
关键参数拆解
validationApi=javax.validation+validationPackage=javax.validation.constraints:强制生成旧版Javax的校验注解,替代默认的Jakarta版本builder=true:额外生成Lombok的@Builder注解(如果不需要可以直接删掉这个参数)lombok=true:自动给POJO加上@Data、@NoArgsConstructor、@AllArgsConstructor这些常用的Lombok注解,省掉手动写getter/setter的麻烦
验证生成的POJO
执行命令后,你会在review-models/src/main/java/org/openapitools/client/model/Review.java里看到类似这样的代码:
package org.openapitools.client.model; import java.util.UUID; import javax.validation.constraints.*; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; @javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2025-05-07T10:55:55.053337300+02:00[Europe/Berlin]", comments = "Generator version: 7.13.0") @Data @Builder @NoArgsConstructor @AllArgsConstructor public class Review { @Nullable private UUID id; @NotNull @Size(min = 10, max = 100) private String title; @NotNull @Size(min = 100, max = 500) private String content; @NotNull @Min(0) @Max(5) private Integer score; @NotNull private UUID bookId; }
能清楚看到:
- Lombok的核心注解都自动加上了
- Javax校验注解@NotNull、@Size、@Min、@Max完全按照你YAML里的约束生成了
- 可选的
id字段也自动加上了@Nullable注解
额外注意事项
- 确保你的openapi-generator-cli版本是v6.0.0及以上,更早的版本对这些参数的支持可能存在bug
- 如果你不需要@Builder注解,把命令里的
builder=true删掉即可 - 生成校验注解的前提是你的OpenAPI YAML约束定义准确,比如
required列表、minLength/maxLength、minimum/maximum这些配置必须正确
内容来源于stack exchange
相关产品推荐
相关产品推荐

