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

Spring REST集成Swagger3后@Schema覆盖校验消息,能否禁用Swagger校验?

问题描述

我们在现有Spring REST应用中引入Swagger3后遇到了校验消息被覆盖的问题:

  • 引入前:使用javax.validation的@NotNull注解校验请求体,错误消息为XXX must not be null
  • 引入后:同时使用@Schema(required = true)与@NotNull时,错误消息变为Missing required creator property 'XXX',Swagger的校验逻辑覆盖了javax.validation的输出。

请问是否可以禁用Swagger的校验功能?

解决方案

可以禁用Swagger的校验功能,以下是几种直接可行的方案:

方案1:移除@Schema(required = true)注解

Swagger的@Schema(required = true)是触发其内置校验的直接原因。如果你的校验逻辑完全依赖javax.validation的注解,直接去掉该注解即可,这样Swagger不会介入校验流程,错误消息会恢复为javax.validation生成的内容。

方案2:禁用Swagger的请求校验过滤器

Swagger通过RequestValidationFilter实现请求体校验,在Spring配置中禁用这个过滤器即可阻断Swagger的校验逻辑:

@Configuration
public class SwaggerConfig {
    @Bean
    public OpenAPI customOpenAPI() {
        return new OpenAPI()
                .info(new Info().title("API文档").version("1.0"));
    }

    // 禁用Swagger请求校验过滤器
    @Bean
    public FilterRegistrationBean<RequestValidationFilter> disableSwaggerValidationFilter() {
        FilterRegistrationBean<RequestValidationFilter> registrationBean = new FilterRegistrationBean<>();
        registrationBean.setFilter(new RequestValidationFilter());
        registrationBean.setEnabled(false);
        return registrationBean;
    }
}

方案3:强制Spring使用javax.validation校验器

通过配置类指定Spring优先使用javax.validation的默认校验器,覆盖Swagger提供的校验组件:

@Configuration
public class ValidationConfig {
    @Bean
    public Validator validator() {
        return Validation.buildDefaultValidatorFactory().getValidator();
    }
}

补充说明

Swagger3的核心定位是生成API文档,校验功能属于附加特性。禁用其校验逻辑不会影响API文档的生成,完全可以保留@Schema注解的其他属性(比如description、example等)来完善文档,只去掉required = true或者禁用校验过滤器即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:30:55