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

如何配置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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 07:46:25