xiaoymin/knife4j

引入springboot3.4后v3/api-docs接口报Handler dispatch failed: java.lang.NoSuchMethodError

Closed this issue · 7 comments

描述
knife4j-openapi3-jakarta-spring-boot-starter+springboot3.4后请求/v3/api-docs报如下异常:
Handler dispatch failed: java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.<init>(java.lang.Object)

分析错误后发现:
org.springdoc.core.service.GenericResponseService.lambda$getGenericMapResponse$8(GenericResponseService.java:702)

此处代码:
new ControllerAdviceBean(controllerAdviceInfo.getControllerAdvice()).isApplicableToBeanType(beanType))
用到了ControllerAdviceBean类的一个参数的构造函数,但是springboot3.4已经移除,只有一个三个构造函数的参数:
public ControllerAdviceBean(String beanName, BeanFactory beanFactory, ControllerAdvice controllerAdvice) {

能不能快速兼容一下发一个版本,谢谢

你这个问题不是knife4j导致的,而是旧版本的springdoc的问题,升级到springdoc-2.7.0这个问题会消失,但会出现新问题。新问题出现在库knife4j-openapi3-jakarta-spring-boot-starter的Knife4jOpenApiCustomizer类第75行,由于springdoc的SpringDocConfigProperties.getGroupConfigs返回类型由List变为Set,导致抛出NoSuchMethod异常。解决方法也很简单,下载4.5.0的源码,升级pom中的版本到你希望的版本,重新编译即可。我编译了一个自己的4.5.1版本,目前为止文档都是正常的,当然,不排除其他地方还可能出现类似的兼容性错误,但那也只有发生了才会知道。
最后,感谢作者提供了一个这么好用的工具,我已经用了快5年了

<dependency>
            <groupId>com.github.xingfudeshi</groupId>
            <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
            <version>4.6.0</version>
 </dependency>

可以先用这个

<dependency>
            <groupId>com.github.xingfudeshi</groupId>
            <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
            <version>4.6.0</version>
 </dependency>

可以先用这个

好的,谢谢。这个是正式版本还是临时版本,我在maven仓库里面没看到

<dependency>
            <groupId>com.github.xingfudeshi</groupId>
            <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
            <version>4.6.0</version>
 </dependency>

可以先用这个

好的,谢谢。这个是正式版本还是临时版本,我在maven仓库里面没看到

这个是我在原版源码上改的,并发布在maven上,方便自己和大家使用.今天刚发布,同步可能需要最长48小时.目前,可以在central仓库看到[1]

[1]https://central.sonatype.com/artifact/com.github.xingfudeshi/knife4j-openapi3-jakarta-spring-boot-starter/overview

<dependency>
            <groupId>com.github.xingfudeshi</groupId>
            <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
            <version>4.6.0</version>
 </dependency>

可以先用这个

谁叫你改包名,搞到我项目全部都要改包名为“幸福的事【xingfudeshi】”

<dependency>
            <groupId>com.github.xingfudeshi</groupId>
            <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
            <version>4.6.0</version>
 </dependency>

可以先用这个

  1. 原先设置的鉴权失效了
    2.文档路径有重复的,tag标签是正确的,api路径重复了
    我遇到了这两个问题,退回到springboot3.3 用原版本就正常了。