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

