如何在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
相关产品推荐
相关产品推荐

