解决办法,在定义的异常类上加注解
@Hidden
这是Springdoc OpenAPI/Knife4j 体系下的一个“隐藏兼容性问题”的典型现象。
原理解释
1. @Hidden 注解的作用
- @Hidden 是 io.swagger.v3.oas.annotations.Hidden,用于告诉 OpenAPI/Swagger/Knife4j 不要扫描/生成该类或方法的接口文档。
- 你加在异常类或异常处理类(如 @ControllerAdvice)上,意味着Knife4j/Springdoc 在生成文档时会跳过这些类。
2. 你的异常类/处理器导致了文档生成时的反射冲突
- Springdoc/Knife4j 在扫描所有 @ControllerAdvice 或异常处理相关类时,会用到 ControllerAdviceBean 的构造方法。
- 由于 Spring Boot 3.4.x/Spring 6.1+ 里 ControllerAdviceBean 的构造方法有变动,而 Knife4j/Springdoc 依赖的 spring-web 版本较低,反射时找不到新方法,就抛出了 NoSuchMethodError。
- 你加了 @Hidden,Knife4j/Springdoc 就不会再扫描你的异常类,也就不会触发反射冲突,自然不会报错。
3. 本质是“规避”了不兼容的扫描
- 这不是根本解决,只是让文档生成时跳过了有兼容性问题的类,所以不再报错。
- 你的异常处理功能依然正常,只是接口文档里不会再显示这些异常类的相关信息。
结论
- 加 @Hidden 是一种“绕过”兼容性问题的办法,让文档生成工具不再扫描有兼容性问题的类,从而避免 NoSuchMethodError。