全网多种方式解决Knife4j文档请求异常

1. 复现问题

今天在本地启动项目后,刷新Knife4j接口文档,却报出如下错误:

即Knife4j文档请求异常。

2. 分析问题

报出Knife4j文档请求异常错误时,赶紧打开控制台,如下图所示:

控制台提示为Unchecked runtime.lastError: The message port closed before a response was received.

简单理解就是端口号关闭了,于是查看后端的端口是否关闭:

后端哪里出现了问题呢?百思不得其解。

正赶上最近ChatGPT很火,于是借助chatGPT来解决我的问题,如下图所示:

因为是我本地启动的项目,可以排除请求超时的问题。

接下来使用postman来测试登录接口,如下图所示:

从上图可以看出来,服务器不存在无响应的问题。

因为引入的是Knife4j的jar包,不需要写控制器的代码,但需要进行配置。

于是,查看我的Knife4j的配置是否有问题,如下代码所示:

public class Knife4jConfiguration {
          
   

  private OpenApiExtensionResolver openApiExtensionResolver;

  @Autowired
  public Knife4jConfiguration(OpenApiExtensionResolver openApiExtensionResolver) {
          
   
    this.openApiExtensionResolver = openApiExtensionResolver;
  }

  @Bean(value = "dockerBean")
  public Docket dockerBean() {
          
   
    Docket docket =
        new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(apiInfo())
            // 分组名称
            .groupName("测试服务")
            .select()
            // 这里指定Controller扫描包路径
            .apis(RequestHandlerSelectors.basePackage("com.cloud.test.controller"))
            .paths(PathSelectors.any())
            .build()
            .extensions(openApiExtensionResolver.buildSettingExtensions());
    // 指定使用Swagger2规范
    return docket;
  }

  private ApiInfo apiInfo() {
          
   
    return new ApiInfoBuilder()
        // 描述字段支持Markdown语法
        .description("测试Knife4j")
        .termsOfServiceUrl(“127.0.0.1”)
        .contact(new Contact("test", "无", "无"))
        .version("1.0")
        .build();
  }
}

蓦然发现,我没有添加@Configuration,才导致Knife4j文档请求异常。

3. 解决问题

既然没有添加@Configuration,那就按如下方式添加即可:

@Configuration
public class Knife4jConfiguration {
          
   

  private OpenApiExtensionResolver openApiExtensionResolver;

  //此处省略上述代码相同的部分
  ......
}

如果上述方法,无法解决你的问题,可以参考以下几种方法。

4. 其他方法解决此异常

  1. 代码中没有添加@EnableSwagger2WebMvc

如果你引入的Knife4j的jar包较低,同时,还需要添加@EnableSwagger2WebMvc注解,如下代码所示:

@Configuration
@EnableSwagger2WebMvc
public class Knife4jConfiguration {
          
   

  private OpenApiExtensionResolver openApiExtensionResolver;

  //此处省略上述代码相同的部分
  ......
}
  1. 项目没有正式启动

一般情况,我们启动java项目时,相对来说比较耗时。

也就是说,你在刚启动项目,就去方法Knife4j接口请求文档,也会报出这个错误。

5. 其他说明

  1. 如果你对Knife4j比较感兴趣,可以参考这篇博文:
经验分享 程序员 微信小程序 职场和发展