OpenAPI Generator 7.1.0未生成@NotBlank注解问题求助
解决openapi-generator-maven-plugin 7.1.0生成@NotBlank注解的问题
针对你遇到的必填字符串字段仅生成@NotNull、需要同时生成@NotBlank的问题,有以下几种可行方案:
方案1:通过OpenAPI规范定义实现(最简便)
OpenAPI的required: true仅标记字段不能为null,若要触发空字符串校验,需给字符串字段额外添加minLength: 1配置。插件会自动为这类字段生成@NotNull + @Size(min = 1),如果你的校验场景可以接受@Size(min=1)替代@NotBlank,这是最快的解决方式。
示例OpenAPI Schema片段:
components: schemas: User: type: object required: - username properties: username: type: string minLength: 1
方案2:自定义Mustache模板(强制生成@NotBlank)
如果必须生成@NotBlank注解,需要修改插件的模型模板:
- 复制OpenAPI Generator内置的Java Spring模型模板
model.mustache到项目的src/main/resources/openapi/templates目录(模板可从插件源码或Maven仓库中获取) - 修改模板中处理必填字段的逻辑,添加字符串类型判断并生成
@NotBlank:
找到生成@NotNull的代码块,修改为:
(Spring Boot 3使用jakarta包路径,若用Spring Boot 2则替换为javax){{#required}} {{#isString}} @jakarta.validation.constraints.NotBlank {{/isString}} @jakarta.validation.constraints.NotNull {{/required}} - 在Maven插件配置中指定自定义模板目录:
<plugin> <groupId>org.openapitools</groupId> <artifactId>openapi-generator-maven-plugin</artifactId> <version>7.1.0</version> <configuration> <!-- 你的原有配置 --> <interfaceOnly>true</interfaceOnly> <skipDefaultInterface>true</skipDefaultInterface> <useSpringBoot3>true</useSpringBoot3> <useSpringController>true</useSpringController> <openApiNullable>false</openApiNullable> <performBeanValidation>true</performBeanValidation> <!-- 指定自定义模板目录 --> <templateDirectory>${project.basedir}/src/main/resources/openapi/templates</templateDirectory> </configuration> </plugin>
注意事项
- 确保项目依赖中已包含Jakarta Validation API(Spring Boot 3默认引入,若手动管理需添加
jakarta.validation:jakarta.validation-api和对应的实现) @NotBlank仅适用于字符串类型,模板中的{{#isString}}判断可以避免给非字符串字段错误添加该注解
内容的提问来源于stack exchange,提问作者pswrdf
相关产品推荐
相关产品推荐

