无需修改Mustache模板,如何用OpenAPI Generator生成不可变Java模型?
不修改Mustache模板生成不可变Java模型的OpenAPI Generator配置方案
方案1:启用Java Records生成(无需Lombok)
OpenAPI Generator v6.0.0及以上版本原生支持生成Java Records,无需修改模板,只需配置以下参数:
- 命令行方式:
openapi-generator generate -g java -i your-spec.yaml -o output-dir --additional-properties modelType=record - Maven插件配置片段:
<plugin> <groupId>org.openapitools</groupId> <artifactId>openapi-generator-maven-plugin</artifactId> <version>7.6.0</version> <configuration> <inputSpec>${project.basedir}/src/main/resources/openapi.yaml</inputSpec> <generatorName>java</generatorName> <additionalProperties> <additionalProperty>modelType=record</additionalProperty> </additionalProperties> </configuration> </plugin>
配置后生成的模型会是标准Java Records,天然不可变,自带构造器、equals/hashCode/toString实现。
方案2:修复Lombok @Value注解下仍生成setter的问题
如果坚持使用Lombok @Value,需通过配置禁用setter生成:
- 核心是在
additionalProperties中添加generateSetters=false(部分旧版本用skipSetters=true),同时开启Lombok支持:
命令行示例:openapi-generator generate -g java -i your-spec.yaml -o output-dir --additional-properties useLombok=true,lombokAnnotationsProvider=lombok,generateSetters=false - Maven插件中对应配置:
<additionalProperties> <additionalProperty>useLombok=true</additionalProperty> <additionalProperty>lombokAnnotationsProvider=lombok</additionalProperty> <additionalProperty>generateSetters=false</additionalProperty> </additionalProperties>
此配置会让生成的类只包含@Value注解,不再生成setter方法,实现不可变。
方案3:针对Spring场景使用immutable参数
如果使用java-spring生成器,可直接配置immutable=true来生成不可变模型:
<additionalProperties> <additionalProperty>immutable=true</additionalProperty> <additionalProperty>useLombok=true</additionalProperty> </additionalProperties>
生成的类会自动添加@Getter、@AllArgsConstructor且无setter,结合Lombok可实现不可变特性。
注意事项
- 优先使用最新稳定版的OpenAPI Generator,旧版本可能不支持部分参数(比如
modelType=record) - 不同生成器类型(java、java-spring等)的参数略有差异,需根据实际使用的生成器调整配置
内容的提问来源于stack exchange,提问作者Philip Kalela
相关产品推荐
相关产品推荐

