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

如何在Java对应的OpenApi YAML文件中配置非空约束生成@NotNull注解

解决方案

1 补全OpenAPI Schema的必填声明

你当前的Schema仅声明了filter数组内部对象的name、value为必填项,缺少SomeClass本身的必填字段声明,先补全配置:

SomeClass:
  type: object
  required: # 新增当前类的必填字段声明
    - filter
  properties:
    filter:
      type: array
      items:
        type: object
        properties:
          name:
            type: string
          value:
            type: string
        required:
          - name
          - value

接口定义里的requestBody.required: true已经是正确配置,不需要修改。

2 开启代码生成器的Bean Validation注解生成开关

你遇到的注解缺失问题是因为多数OpenAPI代码生成器默认关闭了校验注解生成能力,需要手动开启,按你使用的生成器类型选择对应配置:

2.1 使用官方OpenAPI Generator(原Swagger Codegen)

在Maven/Gradle插件的生成配置中添加以下参数:

<!-- Maven插件配置示例 -->
<configuration>
  <configOptions>
    <!-- 启用Bean Validation注解生成 -->
    <useBeanValidation>true</useBeanValidation>
    <!-- 接口层请求参数自动加@Valid触发嵌套校验 -->
    <interfaceRequestBindingAnnotation>@Valid</interfaceRequestBindingAnnotation>
    <!-- 注解生成在接口层,而非实现类 -->
    <generatedAnnotationLevel>interface</generatedAnnotationLevel>
  </configOptions>
</configuration>

2.2 使用springdoc-openapi生态生成代码

首先在项目配置文件中开启校验注解支持:

springdoc:
  model-converters:
    bean-validation:
      enabled: true

再在代码生成插件配置中开启对应开关:

// Gradle插件配置示例
openApiGenerate {
    generatorName = "spring"
    configOptions = [
        useBeanValidation: "true",
        interfaceOnly: "true"
    ]
}

3 兼容旧版本生成器的额外配置

部分低版本OpenAPI生成器不会读取nullable的默认值,需要你给必填字段显式添加nullable: false声明,才会自动生成@NotNull注解:

name:
  type: string
  nullable: false # 显式声明非空

配置完成后重新生成代码,接口层会自动给必填参数、必填字段加上@NotNull、@Valid等校验注解,你直接删掉实现类上手动添加的@NotNull即可,不会再触发违反里氏替换原则的报错。

内容的提问来源于stack exchange,提问作者Hummus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 21:18:04