如何在springdoc自动生成的Swagger文档中移除minimum参数
解决SpringDoc保留@Min校验但隐藏Swagger文档中minimum字段的问题
针对你使用springdoc-openapi-starter-webmvc-ui 2.1.0时,@Min注解会自动映射到Swagger Schema的minimum字段且覆盖@Schema配置的问题,可以通过自定义ModelConverter的方式实现保留校验逻辑、隐藏文档中minimum属性的需求,具体步骤如下:
实现自定义ModelConverter
创建一个转换器,拦截带有@Min注解的字段/参数,在默认转换完成后移除Schema中的minimum属性:
import io.swagger.v3.core.converter.AnnotatedType; import io.swagger.v3.core.converter.ModelConverter; import io.swagger.v3.core.converter.ModelConverterContext; import io.swagger.v3.core.converter.ModelConverterImpl; import io.swagger.v3.oas.models.media.Schema; import jakarta.validation.constraints.Min; import java.lang.annotation.Annotation; import java.util.Iterator; public class MinAnnotationHideConverter extends ModelConverterImpl { @Override public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context, Iterator<ModelConverter> chain) { // 先执行默认转换逻辑 Schema schema = super.resolve(annotatedType, context, chain); if (schema == null) { return null; } // 检查当前类型是否带有@Min注解,有则移除minimum属性 for (Annotation annotation : annotatedType.getCtxAnnotations()) { if (annotation instanceof Min) { schema.setMinimum(null); break; } } return schema; } }
注册自定义转换器
通过配置类将自定义转换器注册到SpringDoc的ModelConverters中,确保它能修改默认转换后的Schema:
import io.swagger.v3.core.converter.ModelConverters; import org.springframework.context.annotation.Configuration; import jakarta.annotation.PostConstruct; @Configuration public class SpringDocCustomConfig { @PostConstruct public void registerCustomConverter() { ModelConverters.getInstance().addConverter(new MinAnnotationHideConverter()); } }
验证效果
- 重启应用后,打开Swagger UI查看接口文档,带有@Min注解的参数/字段的Schema中将不再显示
minimum属性; - 测试接口校验逻辑:传入小于@Min指定值的参数,依然会触发Jakarta Validation的校验错误,说明@Min的校验功能正常保留。
补充说明
如果需要全局禁用所有Validation注解到Schema的映射,可以在application.properties中添加配置:
springdoc.openapi.convert.validation.enabled=false
但这个配置会屏蔽所有校验注解(如@Max、@NotNull等)的文档映射,仅适合不需要任何校验注解关联文档的场景,因此更推荐使用自定义转换器的精准方案。
内容的提问来源于stack exchange,提问作者Marat Tim
相关产品推荐
相关产品推荐

