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

如何通过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都看不到。结合你的场景,我来一步步帮你解决:

问题出在哪?

你之前的命令大部分参数都没问题,但有两个关键疏漏:

  1. 现在新版本的openapi-generator默认用Jakarta Validation(也就是jakarta.validation.constraints下的注解),而不是你需要的旧版Javax校验包,没指定切换参数的话自然不会生成Javax注解
  2. 虽然加了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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 11:17:58