整合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包如下所示

<!--Swagger-UI API文档生产工具-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
         <dependency>
             <groupId>io.springfox</groupId>
             <artifactId>springfox-swagger-ui</artifactId>
             <version>2.9.2</version>
         </dependency>
     <!--swagger增强工具依赖包,方便生成接口文档。非必须导入-->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
            <version>2.0.8</version>
        </dependency>

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显示文档


4.2、Swagger-ui显示文档

5、参考文章

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

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

  • 21
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值