整合Knife4j生成文档后端接口文档出现404无法找到doc.html

目录

1、使用场景

2、错误原因解析

3、Knife4jorSwaggerUI配置

4、呈现效果或者swagger-ui与knife4j可以切换

5、参考文章


1、使用场景

        最近自己在总结搭建一个统一数据后端的基础框架,在整合knife4j的时候出现了无法找到doc.html页面的问题。其中目前网上解决方案都是统一的一种模式,

在应用启动里面实现(implements WebMvcConfigurer)。

2、错误原因解析

        因为我使用的 继承(extends WebMvcConfigurationSupport),新旧版本SpringBoot配置文件 WebMvcConfigurationSupport类 和 WebMvcConfigurer接口之间有冲突。

因为我写了一个返回后端数据统一注解ResponseResult,需要在WebMvcConfigurer/WebMvcConfigurationSupport 注入拦截器。同时考虑到不破坏启动之中类干净

显示内容,于是想到自己定义一个@Configuration类WebAppMvcConfig,去实现WebMvcConfigurer,这样就能够解决我响应结果拦截器ResponseResultInterceptor的注入,

同时比较友好的加入Knife4j的doc.html,以及swagger-ui.html页面友好显示。同时也解决了Knife4j显示404的问题。具体类如下所示:

import cn.hutool.core.date.DatePattern;
import com.whdcmap.common.response.ResponseResultInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.format.datetime.standard.DateTimeFormatterRegistrar;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.time.format.DateTimeFormatter;

/**
 * @Description TODO
 * @Classname Knife4jWebMvcConfig
 * @Date 2021/3/2 15:27
 * @Created by jianxiapc
 */
@Configuration
public class WebAppMvcConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        /**
         * 注册自定义的显示 ResponseResult 注解的拦截器
         */
        registry.addInterceptor(new ResponseResultInterceptor())
                // 拦截配置
                .addPathPatterns("/**")
                // 排除配置
                .excludePathPatterns("/error", "/login**");
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {

        registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");

        /** 配置knife4j 显示文档 */
        registry.addResourceHandler("doc.html")
                .addResourceLocations("classpath:/META-INF/resources/");

        /**
         * 配置swagger-ui显示文档
         */
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        /** 公共部分内容 */
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }

}

3、Knife4jorSwaggerUI配置

   3.1、需要引入swagger和Knife4j基本jar包如下所示


        
            io.springfox
            springfox-swagger2
            2.9.2
        
         
             io.springfox
             springfox-swagger-ui
             2.9.2
         
     
        
            com.github.xiaoymin
            knife4j-spring-boot-starter
            2.0.8
        

3.2、配置knife4j或者swaggerui基本配置信息

注意事项:一下代码如果自己的简单功能直接书写相关controller扫描包即可,我这边主要扫描注解了RestController相关类

//这里指定Controller扫描包路径
.apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))

示例:

//这里指定Controller扫描包路径(项目路径也行)
.apis(RequestHandlerSelectors.basePackage("com.example.knife4j.demo")
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;


@EnableSwagger2
@EnableKnife4j
@Configuration
public class Knife4jOrSwagger2Config {

    @Bean(value = "defaultApi2")
    public Docket defaultApi2() {
        Docket docket=new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                //分组名称
                .groupName("测试分组")
                .select()
                //这里指定Controller扫描包路径
                .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
                .paths(PathSelectors.any())
                .build();
        return docket;
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Spring Boot Knife4j or swagger-bootstrap-ui API V1.0")
                .description("swagger-bootstrap-ui-demo RESTful APIs")
                .version("1.0")
                .build();
    }
}

4、呈现效果或者swagger-ui与knife4j可以切换

4.1、Knife4j显示文档

整合Knife4j生成文档后端接口文档出现404无法找到doc.html_第1张图片
4.2、Swagger-ui显示文档

整合Knife4j生成文档后端接口文档出现404无法找到doc.html_第2张图片

5、参考文章

SpringBoot配置knife4j版的Swagger打开doc.html页面404

Springboot集成knife4j实现风格化API文档

你可能感兴趣的:(SpringBoot,接口调试,spring,boot,java)