You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Swagger SpringFox不识别JSR303 Bean Validation问题求助

解决Swagger文档不显示JSR303校验信息的问题

我之前也碰到过一模一样的情况,更新依赖后还是没显示校验信息,你可以从以下几个方面逐一排查:

  • 确保引入了SpringFox的Bean Validator依赖
    仅仅更新SpringFox核心依赖还不够,需要额外引入专门支持JSR303注解的插件依赖。如果用Maven的话,在pom.xml里添加:

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-bean-validators</artifactId>
        <version>${springfox.version}</version>
    </dependency>
    

    注意版本要和你使用的SpringFox核心版本保持一致。

  • 在Swagger配置类中导入校验插件配置
    打开你的Swagger配置类,添加@Import(BeanValidatorPluginsConfiguration.class)注解,让SpringFox加载校验注解的解析插件:

    @Configuration
    @EnableSwagger2 // 如果是SpringFox 3.x版本,换成@EnableOpenApi
    @Import(BeanValidatorPluginsConfiguration.class)
    public class SwaggerConfig {
        // 你的Docket配置等代码
    }
    
  • 确认实体类的校验注解使用正确
    检查实体类上的注解是不是javax.validation.constraints包下的(比如@NotNull、@Size、@Email等),不要用错了包。另外,注解的message属性最好明确设置,这样文档里才会显示对应的提示信息,比如:

    public class User {
        @NotNull(message = "用户ID不能为空")
        private Long id;
    
        @Size(min = 2, max = 20, message = "用户名长度需在2-20字符之间")
        private String username;
    }
    
  • 检查Spring Boot版本对应的Validation依赖
    如果你的项目用的是Spring Boot 2.3及以上版本,官方默认移除了validation starter,需要手动引入:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
    

    没有这个依赖的话,JSR303注解本身都不会生效,更别说在Swagger文档里显示了。

  • 排查SpringFox版本兼容性
    如果你用的是较新的Spring Boot版本,要确保SpringFox版本与之兼容。比如Spring Boot 2.3+建议使用SpringFox 3.x版本,而2.x版本的SpringFox适配Spring Boot 2.2及以下会更稳定。如果版本不匹配,也可能导致校验信息无法正常解析。

按照上面的步骤逐一检查后,应该就能让JSR303的校验信息正常显示在Swagger文档里了。

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

火山引擎 最新活动