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

如何使用springdoc-openapi将所有可选OpenAPI参数自动设为nullable

解决方案

方案一:使用内置配置(推荐,适用于springdoc-openapi 1.6.0+版本)

这是最简单的实现方式,只需要在项目配置文件中添加一行配置即可开启全局自动nullable规则:
application.properties配置:

springdoc.default-nullable=true

application.yml配置:

springdoc:
  default-nullable: true

开启后框架会自动将所有不在required列表中的属性标记为nullable: true,完全匹配你需要的逻辑。

方案二:自定义SchemaCustomizer(适用于旧版本或需要自定义规则的场景)

如果使用的springdoc版本较低不支持上述配置,或者需要调整规则(比如只对特定包下的模型生效),可以通过自定义SchemaCustomizer实现:

import io.swagger.v3.oas.models.media.Schema;
import org.springdoc.core.customizers.SchemaCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.List;
import java.util.Map;

@Configuration
public class SpringDocConfig {
    @Bean
    public SchemaCustomizer nullableSchemaCustomizer() {
        return (schema, annotatedType) -> {
            // 仅处理对象类型的Schema
            if (schema.getType() == null || !"object".equals(schema.getType()) || schema.getProperties() == null) {
                return schema;
            }
            List<String> requiredFields = schema.getRequired();
            // 无必填字段时所有属性都设为nullable
            if (requiredFields == null || requiredFields.isEmpty()) {
                schema.getProperties().values().forEach(prop -> prop.setNullable(true));
                return schema;
            }
            // 遍历属性,不在必填列表的标记为nullable
            for (Map.Entry<String, Schema> entry : schema.getProperties().entrySet()) {
                if (!requiredFields.contains(entry.getKey())) {
                    entry.getValue().setNullable(true);
                }
            }
            return schema;
        };
    }
}

效果验证

配置完成后,你给出的RequiredExample类生成的OpenAPI文档就会和期望结果一致,非必填的value字段会自动带上nullable: true属性。

注意事项

  • 显式标注了@Schema(nullable = xxx)的属性优先级高于全局规则,不会被自动配置覆盖
  • 如果项目中使用了Jackson的非空序列化配置,建议确保nullable规则和实际序列化行为保持一致

内容的提问来源于stack exchange,提问作者M. Justin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:09:03