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

springdoc中@NotNull导致@Schema(required=false)失效的解决方法

问题原因

springdoc-openapi 1.x版本默认开启JSR-380(javax.validation)校验注解的Schema自动推导逻辑,字段标记@NotNull时会被自动加入接口文档Schema的必填列表,此时@Schema(required = false)的布尔属性优先级低于自动推导规则,因此配置不生效。

解决方案

方案1:单字段指定必填模式(推荐,影响范围最小)

@Schema注解提供的requiredMode枚举属性优先级高于自动推导规则,只需将原注解的required = false替换为显式指定requiredMode = Schema.RequiredMode.NOT_REQUIRED即可,修改后代码如下:

import io.swagger.v3.oas.annotations.media.Schema;
import javax.validation.constraints.NotNull;

public class Model {
    @NotNull
    @Schema(requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

该方案不会影响其他字段的自动推导逻辑,同时@NotNull的参数校验能力完全保留,仅修改文档中该字段的必填标记。

方案2:全局关闭校验注解必填推导(仅当全项目需要该逻辑时使用)

如果项目中所有带@NotNull的字段都不需要自动标记为文档必填,可以在配置文件中关闭自动推导逻辑。
yaml格式配置:

springdoc:
  api-docs:
    resolve-schema-required-properties: false

properties格式配置:

springdoc.api-docs.resolve-schema-required-properties=false

注意:该配置为全局生效,关闭后所有字段的文档必填状态完全由@Schema注解控制,不会再读取校验注解的规则,非特殊需求不建议使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:57:15