如何配置Swagger生成拒绝Null值的API验证代码?
解决方法
1. 调整Gradle OpenAPI Generator配置
修改buildApiModel任务的configOptions,补充Bean Validation相关配置,让生成的代码能被Spring校验机制识别:
configOptions = [ java11 : "true", dateLibrary : "java11", interfaceOnly : "true", additionalModelTypeAnnotations: "@lombok.experimental.SuperBuilder @lombok.AllArgsConstructor @JsonInclude(JsonInclude.Include.NON_NULL)", validationAnnotations : "jakarta.validation.constraints.NotNull", useBeanValidation : "true" ]
validationAnnotations: 指定生成Jakarta Validation标准的@NotNull注解(Spring Validation默认依赖该注解,而非原生成的@javax.annotation.Nonnull)useBeanValidation: 开启嵌套对象校验支持,让顶层对象中的trafficMap字段自动生成@Valid注解,触发递归校验内部的semaphore属性
2. 确认Swagger定义无需修改
你当前的Swagger配置已经正确标记colour为必填项,保持现有配置即可:
trafficMap: type: object properties: semaphore: type: object properties: colour: type: string enum: [GREEN, YELLOW, RED] required: - colour
3. 引入Spring Validation依赖
确保项目中添加了Spring校验的核心依赖(若使用Spring Boot):
implementation 'org.springframework.boot:spring-boot-starter-validation'
4. 验证生成代码效果
重新执行buildApiModel任务后:
Semaphore类的colour字段会带有@jakarta.validation.constraints.NotNull注解- 包含
trafficMap的顶层请求类(如Payee)中,trafficMap字段会带有@Valid注解,确保Spring递归校验嵌套对象的必填字段
关键说明
- 原生成的
@javax.annotation.Nonnull不会被Spring Validation识别,必须替换为Jakarta Validation的@NotNull - 嵌套对象必须通过
@Valid触发递归校验,否则Spring只会校验顶层对象,忽略内部的semaphore和colour字段 JsonInclude属于序列化配置,和请求参数校验无关,无需调整其取值
内容的提问来源于stack exchange,提问作者Julian
相关产品推荐
相关产品推荐

