SpringCloud整合增强版Swagger ---Knife4j(注释超详细)

在微服务中引入Knife4j,我使用的是将Knife4j放到公共的配置模块下,这样其他微服务需要使用到swagger就可以直接导入使用,在配置文件配置我需要的一些配置即可,这样的优势在于可以完美兼容所有的微服务,并且不需要去重复配置。从此告别手写开发文档

PS:如果是单应用的话也可以使用

代码部分

引入依赖,最新版即可
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>		
新建Knife4jConfiguration类
使用到EnableSwagger2注解,用来开启swagger和EnableKnife4j来开启knife4j
/**
 * @program: e-commerce
 * @description: knife4j配置类
 * @author: JiaChaoYang
 * @date: 2022-09-24 21:03
 **/
@Configuration
@EnableSwagger2
@EnableKnife4j
public class Knife4jConfiguration {

	/*需要在配置文件里配置这三个配置*/
    /*配置开启禁用swagger*/
    @Value("${swagger.enabled}")
    private boolean enabled;

    /*配置模块名*/
    @Value("${swagger.groupName}")
    private String groupName;

    /*配置需要扫描的包*/
    @Value("${swagger.basePackage}")
    private String basePackage;

    /**
    * @Description: Swagger 实例 Bean是Docket,所以通过配置Docket实例来配置Swagger
    * @return: springfox.documentation.spring.web.plugins.Docket
    * @Author: JiaChaoYang
    * @Date: 2022-09-24 - 11:36
    */
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.OAS_30)//文档类型,我这里使用的是swagger3
                //是否启用swagger
                .enable(enabled)
                //包名,模块名
                .groupName(groupName)
                //删除swagger中的操作的响应体
                .useDefaultResponseMessages(false)
                //展示在Swagger页面上的自定义工程描述信息
                .apiInfo(apiInfo())
                //选择展示哪些接口
                .select()
                //配置需要扫描的路径(controller)
                .apis(RequestHandlerSelectors.basePackage(basePackage))
                //给所有文档都生成文档路径
                .paths(PathSelectors.any())
                .build();
    }

    /**
    * @Description: Swagger的描述信息
    * @return: springfox.documentation.service.ApiInfo
    * @Author: JiaChaoYang
    * @Date: 2022-09-24 - 11:33
    */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                //描述信息
                .description("测试Knife4j")
                //可以通过swagger联系一个人,即联系方式
                .contact(new Contact("JiaChaoYang", "https://127.0.0.1:9001/doc.html", "j15030047216@163.com"))
                //版本
                .version("v1.0")
                //标题
                .title("测试文档")
                .build();
    }
为了防止不在同一包下扫描不到需要在resources下新建META-INF文件夹,再在META-INF文件夹下新建spring.factories(推荐),或者启动类使用@ComponentScan扫描(推荐)。或者把包名全部改为一样的(不推荐)

在这里插入图片描述

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.qihengyun.core.Knife4jConfiguration

其他模块引用,只需要在bootstrap.yml或者application.yml中配置这三个参数就可以了

1.是否开启Swagger。在生产环境下使用的话会暴露接口,所以在配置文件去控制是否打开
2.模块名
3.需要扫描的类的路径

swagger:
  enabled: true
  groupName: 登录鉴权微服务模块
  basePackage: 你的controller路径

需要在拦截器配置让MVC加载Swagger的静态资源

/**
    * @Description: 让MVC加载Swagger的静态资源
    * @Param: [registry]
    * @return: void
    * @Author: JiaChaoYang
    * @Date: 2022/9/24 - 20:55
    */
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {

        registry.addResourceHandler("/**").
                addResourceLocations("classpath:/static/");
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("doc.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");

        super.addResourceHandlers(registry);
    }

如果有拦截器和过滤器的话需要将Swagger放到白名单,即不去鉴权,需要把下边的配置给排除掉

"springfox",
"swagger",
"v3",
"webjars",
"doc.html",
"favicon.ico",
"api-docs"

运行(http://127.0.0.1:端口/doc.html)

在这里插入图片描述

到这里配置就结束了,当然还有一个很严重的问题,就是springboot2.6和springfox不兼容的问题,在配置文件去修改mvc匹配策略有点治标不治本,所以参考了一下GitHub上的大佬的配置,只需要放到Knife4j的配置类即可

@Bean
    public static BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() {
        return new BeanPostProcessor() {

            @Override
            public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
                if (bean instanceof WebMvcRequestHandlerProvider || bean instanceof WebFluxRequestHandlerProvider) {
                    customizeSpringfoxHandlerMappings(getHandlerMappings(bean));
                }
                return bean;
            }

            private <T extends RequestMappingInfoHandlerMapping> void customizeSpringfoxHandlerMappings(List<T> mappings) {
                List<T> copy = mappings.stream()
                        .filter(mapping -> mapping.getPatternParser() == null)
                        .collect(Collectors.toList());
                mappings.clear();
                mappings.addAll(copy);
            }

            @SuppressWarnings("unchecked")
            private List<RequestMappingInfoHandlerMapping> getHandlerMappings(Object bean) {
                try {
                    Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings");
                    field.setAccessible(true);
                    return (List<RequestMappingInfoHandlerMapping>) field.get(bean);
                } catch (IllegalArgumentException | IllegalAccessException e) {
                    throw new IllegalStateException(e);
                }
            }
        };
    }
### 回答1: cloud-nacos-gateway-knife4j:swagger聚合文档是使用Spring Cloud和Nacos作为技术栈开发的一种解决方案。 Spring Cloud是一套开发分布式应用的工具集,它基于Spring Boot,用于构建微服务架构的应用程序。它提供了诸如服务注册与发现、服务追踪、负载均衡等功能,可以方便地实现微服务的开发和管理。在这个解决方案中,我们使用了Spring Cloud来构建和管理微服务。 Nacos是一个动态服务发现、配置管理和服务管理平台。它提供了服务注册与发现、配置管理、动态路由等功能,可以方便地实现微服务的注册与发现、配置的动态管理。在这个解决方案中,我们将使用Nacos作为服务注册与发现的中心。 Gateway是Spring Cloud的网关组件,它以微服务的方式构建网关,提供了统一的入口和出口,可以对请求进行路由、过滤、聚合等多种操作。在这个解决方案中,我们使用Gateway作为网关组件,统一管理和分发请求。 Knife4j是一个开源的Swagger文档聚合工具,它可以将多个微服务Swagger文档聚合在一起,提供一个统一的API文档入口。在这个解决方案中,我们使用Knife4j来聚合各个微服务Swagger文档,方便开发人员查看和调试API接口。 综上所述,cloud-nacos-gateway-knife4j:swagger聚合文档使用了Spring Cloud、Nacos、Gateway和Knife4j等技术,通过Spring Cloud构建和管理微服务,使用Nacos实现服务注册与发现,通过Gateway实现统一的请求分发和路由,再通过Knife4j将各个微服务Swagger文档聚合在一起,方便开发人员进行API的查看和调试。这个解决方案可以提高开发效率、简化架构,使得微服务的开发和管理更加方便和高效。 ### 回答2: cloud-nacos-gateway-knife4j是基于Spring Cloud、Nacos、Gateway和Knife4j等技术实现的Swagger聚合文档工具。 首先,这个工具使用了Spring Cloud框架,它是一种用于构建分布式系统的解决方案。Spring Cloud提供了一系列插件和组件,使得我们可以轻松地构建、部署和管理分布式应用。这些组件包括服务发现与注册、服务间调用、负载均衡、断路器等等。在cloud-nacos-gateway-knife4j中,我们使用Spring Cloud来实现服务注册与发现的功能,使得不同的微服务可以方便地相互调用。 其次,cloud-nacos-gateway-knife4j还使用了Nacos作为服务的注册中心。Nacos是一个开源的动态服务发现、配置和服务管理平台,它提供了服务注册、服务发现、服务配置、路由配置等功能。在cloud-nacos-gateway-knife4j中,我们使用Nacos作为服务注册中心,来管理微服务的地址和配置信息。 另外,cloud-nacos-gateway-knife4j还使用了Gateway作为API网关。API网关是系统的统一入口,它可以处理一些通用的非业务功能,如身份认证、请求转发、限流等等。在cloud-nacos-gateway-knife4j中,我们使用Gateway作为API网关,实现了请求的转发和一些基本的安全控制功能。 最后,cloud-nacos-gateway-knife4j还使用了Knife4j作为Swagger的UI界面。Swagger是一种用于构建、文档化和调试RESTful接口的工具,它提供了一套非常直观的界面来展示接口信息和测试接口。在cloud-nacos-gateway-knife4j中,我们使用Knife4j来生成并展示聚合文档,使得接口文档更加友好和易用。 总的来说,cloud-nacos-gateway-knife4j是一个基于Spring Cloud、Nacos、Gateway和Knife4j等技术实现的Swagger聚合文档工具。它利用这些技术的优势,帮助开发者更好地管理和维护微服务,并提供了友好的界面来查看和测试接口文档。 ### 回答3: Cloud-Nacos-Gateway-Knife4j 是一个使用 Spring Cloud 和 Nacos 技术实现的聚合文档,其中集成了 Swagger。它可以帮助开发者更便捷地查看和管理项目的 API 文档。 Spring Cloud 是一个开发微服务架构的框架,提供了许多功能,例如服务注册与发现、配置管理、负载均衡等。Nacos 是一个用于服务注册与发现、动态配置管理的平台,可以实现服务的自动发现和配置更新。这两个技术结合起来,可以方便地构建和管理微服务架构。 Cloud-Nacos-Gateway-Knife4j 中的 Gateway 是一个 API 网关,它可以承担路由和负载均衡的作用,将外部请求转发给后端的微服务Knife4j 是一个为 Swagger 提供增强功能的工具,可以生成美观的 API 文档,并提供了在线测试接口的功能。 在使用 Cloud-Nacos-Gateway-Knife4j 架构时,我们可以通过 Nacos 注册中心管理和发现微服务,以及实现动态的配置更新。Gateway 作为入口,将外部请求转发到相应的微服务。同时,我们可以使用 Knife4j 生成并展示微服务的 API 文档,便于开发者查看和调试接口。 总之,Cloud-Nacos-Gateway-Knife4j 提供了一种基于 Spring Cloud 和 Nacos 的微服务架构解决方案,提供了服务注册发现、配置管理、API 文档和在线测试等功能,为开发者带来了更加便捷和高效的开发体验。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值