首页 > 其他分享 >spring boot swagger knife4j使用

spring boot swagger knife4j使用

时间:2024-01-26 23:34:39浏览次数:30  
标签:knife4j enable false spring swagger true

Swagger2已经在17年停止维护了,取而代之的是 Swagger3(基于openApi3),这篇文章将介绍如何在 java 中使用 OpenApi3(swagger3)以及与swagger2的对比。

1.基本介绍

1.1 Open API

OpenApi是业界真正的 api 文档标准,其是由 Swagger 来维护的,并被linux列为api标准,从而成为行业标准。

1.2 Swagger

swagger 是一个 api 文档维护组织,后来成为了 Open API 标准的主要定义者,现在最新的版本为17年发布的 Swagger3(Open Api3)。国内绝大部分人还在用过时的swagger2(17年停止维护并更名为swagger3)。swagger2的包名为 io.swagger,而swagger3的包名为 io.swagger.core.v3。

1.3 SpringFox

SpringFox是 spring 社区维护的一个项目(非官方),帮助使用者将 swagger2 集成到 Spring 中。常常用于 Spring 中帮助开发者生成文档,并可以轻松的在spring boot中使用。截至2020年4月,都未支持 OpenAPI3 标准。

补充:2020.7.14 发布了 3.0 支持 OpenAPI3,github 发布记录 但官网对 3.0 版本相关文档未完善,还是只有 swagger 2.0 相关的。
升级到 OpenAPI3(java 中 swagger1.x 对应 OpenAPI2、swagger 2.x对应OpenAPI3)官方文档

1.4 swagger3 相关特性

  • 支持 Spring 5,Webflux(仅请求映射支持,尚不支持功能端点)、Spring Integration
  • 官方在 spring boot 的自动装配 pringfox-boot-starter 以后可以直接依赖一个 dependency
  • 与swagger2.0更好的规范兼容性
  • 支持OpenApi 3.0.3
  • 轻依赖 spring-plugin,swagger-core

1.5 SpringDoc

SpringDoc也是 spring 社区维护的一个项目(非官方),帮助使用者将 swagger3 集成到 Spring 中。
也是用来在 Spring 中帮助开发者生成文档,并可以轻松的在spring boot中使用。

该组织下的项目支持swagger页面Oauth2登录(Open API3的内容),相较 SpringFox来说,它的支撑时间更长,无疑是更好的选择。但由于国内发展较慢,在国内不容易看到太多有用的文档,不过可以访问它的官网。它的使用了 swagger3(OpenAPI3),但 swagger3 并未对 swagger2 的注解做兼容,不易迁移,也因此,名气并不如 spring fox。

2.开始使用

2.1 从 spring-fox 迁移到 springdoc

依赖变更
pom.xml 里去掉 springfox 或者 swagger 的依赖,添加springdoc-openapi-ui。

  1.   <dependency>
  2.   <groupId>org.springdoc</groupId>
  3.   <artifactId>springdoc-openapi-ui</artifactId>
  4.   <version>1.5.2</version>
  5.   </dependency>

2.2 Swagger3与 Swagger2注解对比使用

使用 swagger3 注解代替 swagger2 的(为可选项)

Swagger3 Swagger2 注解说明
 @Tag(name = “接口类描述”) @Api Controller 类
@Operation(summary =“接口方法描述”)  @ApiOperation Controller 方法
@Parameters @ApiImplicitParams Controller 方法
 @Parameter(description=“参数描述”)

@ApiImplicitParam

@ApiParam

Controller 方法上 @Parameters 里

Controller 方法的参数

@Parameter(hidden = true) 

@Operation(hidden = true)

@Hidden

@ApiIgnore 排除或隐藏api
@Schema

@ApiModel

@ApiModelProperty

DTO实体

DTO实体属性
 

Swagger2 的注解命名以易用性切入,全是 Api 开头,在培养出使用者依赖注解的习惯后,Swagger 3将注解名称规范化,工程化。

@ApiParam和@ApiImplicitParam的功能是相同的,但是@ApiImplicitParam的适用范围更广。在非JAX-RS的场合(比如使用servlet提供HTTP接口),只能使用@ApiImplicitParam进行参数说明。我认为,这是因为接口并不显式展示入参的名称,所以没有地方去使用@ApiParam,只能在接口的方法声明下方写@ApiImplicitParam

 

 

2.3  Api 分组配置

Swagger2 配置:

@Bean
    public Docket publicApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
             .apis(RequestHandlerSelectors.basePackage("org.github.springshop.web.public"))
                .paths(PathSelectors.regex("/api/v1/public.*"))
                .build()
                .groupName("spring-app-public")
                .apiInfo(apiInfo());
    }
Swagger3配置:

@Bean
    public GroupedOpenApi publicApi() {
        return GroupedOpenApi.builder()
                .setGroup("spring-app-public")
                .pathsToMatch("/api/v1/public/**")
                .build();
    }
Swagger3用配置文件替代代码配置:

springdoc.packagesToScan=package1, package2

springdoc.pathsToMatch=/api/v1/public/**

 

swagger2 使用:

            <!-- knife4j 接口文档工具 -->
            <dependency>
                <groupId>com.github.xiaoymin</groupId>
                <artifactId>knife4j-spring-boot-starter</artifactId>
                <version>2.0.9</version>
            </dependency>
            <dependency>
                <groupId>com.github.xiaoymin</groupId>
                <artifactId>knife4j-springdoc-ui</artifactId>
                <version>3.0.3</version>
            </dependency>
@Configuration
@EnableSwagger2WebMvc
public class Knife4jConfiguration {

    @Bean(value = "defaultApi2")
    public Docket defaultApi2() {
        Docket docket=new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(new ApiInfoBuilder()
                        //.title("swagger-bootstrap-ui-demo RESTful APIs")
                        .description("# swagger-bootstrap-ui-demo RESTful APIs")
                        .termsOfServiceUrl("http://www.xx.com/")
                        .contact("[email protected]")
                        .version("1.0")
                        .build())
                //分组名称
                .groupName("2.X版本")
                .select()
                //这里指定Controller扫描包路径
                .apis(RequestHandlerSelectors.basePackage("com.github.xiaoymin.knife4j.controller"))
                .paths(PathSelectors.any())
                .build();
        return docket;
    }
}

 

https://doc.xiaominfo.com/docs/action/springboot

 

knife4j的增强配置

Knife4j自2.0.6版本开始,将目前在Ui界面中一些个性化配置剥离,开发者可以在后端进行配置,并且提供的knife4j-spring-boot-strater组件自动装载

spring.factories配置如下:

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.github.xiaoymin.knife4j.spring.configuration.Knife4jAutoConfiguration

 

在Spring Boot配置文件中,完整的配置如下:

重要提示

Knife4j 自4.0版本,配置属性元数据全部改由spring-boot-configuration-processor自动生成,因此之前版本的驼峰命名全部修改成了横杠(-)代替

knife4j:
enable: true
documents:
-
group: 2.X版本
name: 接口签名
locations: classpath:sign/*
setting:
language: zh-CN
enable-swagger-models: true
enable-document-manage: true
swagger-model-name: 实体类列表
enable-version: false
enable-reload-cache-parameter: false
enable-after-script: true
enable-filter-multipart-api-method-type: POST
enable-filter-multipart-apis: false
enable-request-cache: true
enable-host: false
enable-host-text: 192.168.0.193:8000
enable-home-custom: true
home-custom-path: classpath:markdown/home.md
enable-search: false
enable-footer: false
enable-footer-custom: true
footer-custom-content: Apache License 2.0 | Copyright 2019-[浙江八一菜刀股份有限公司](https://gitee.com/xiaoym/knife4j)
enable-dynamic-parameter: false
enable-debug: true
enable-open-api: false
enable-group: true
cors: false
production: false
basic:
enable: false
username: test
password: 12313
 

在以前的版本中,开发者需要在配置文件中手动使用@EnableKnife4j来使用增强,自2.0.6版本后,只需要在配置文件中配置knife4j.enable=true即可不在使用注解

注意:要使用Knife4j提供的增强,knife4j.enable=true必须开启

https://doc.xiaominfo.com/docs/features/enhance

示例:

# https://doc.xiaominfo.com/knife4j
knife4j:
  # 开启增强配置
  enable: true
  # 是否开启生产环境屏蔽   true:关闭swagger,false:开启swagger
  production: false
  basic:
    # 是否开启认证
    enable: false
    # Basic认证用户名
    username: admin
    # Basic认证密码
    password: 123456

 

标签:knife4j,enable,false,spring,swagger,true
From: https://www.cnblogs.com/youxin/p/17990945

相关文章

  • spring boot mybatis plus & tk-mybatis
    使用Mybatis时,最大的问题是,要写大量的重复SQL语句在xml文件中,除了特殊的业务逻辑SQL语句之外,还有大量结构类似的增删改查SQL。而且,当数据库表结构改动时,对应的所有SQL以及实体类都需要更改。这大量增加了程序员的负担。避免重复书写CRUD映射的框架有两个通用mybati......
  • 详解SpringCloud之远程方法调用神器Fegin
    第1章:引言咱们作为Java程序员,在微服务领域里,SpringCloud可谓是个耳熟能详的大名。它提供了一套完整的微服务解决方案,其中就包括了服务间的通信。在这个微服务中,有一个成员特别引人注意,它就是Feign。那Feign到底是什么呢?简单来说,Feign是一个声明式的Web服务客户端,它让编写Web服......
  • SpringMVC之域对象共享数据的多种方式
    本次场景演示使用Thymeleaf服务器渲染技术。使用Servlet向域中共享数据@GetMapping("/testServletScope")publicStringtestServlet(HttpServletRequestrequest){request.setAttribute("testServletScope","hello,servlet");return"success&qu......
  • 在springboot中controller控制器的crud语句@RequestBody遗落的报错
    在进行java练习的过程中,对一个单链表进行增删改查时发现了如下错误:对编译器的控制台进行检查之后,发现了报错语句如下:2024-01-2619:43:52.551ERROR18544---[p-nio-80-exec-5]o.a.c.c.C.[.[.[/].[dispatcherServlet]:Servlet.service()forservlet[dispatcherSe......
  • redis 7.07升级导致spring boot连接不上
    Causedby:org.springframework.data.redis.connection.PoolException:Couldnotgetaresourcefromthepool;nestedexceptionisio.lettuce.core.RedisConnectionException:Unabletoconnect升级springboot、升级jedis<parent> <groupId>org.springfram......
  • Springcloud学习笔记61---Spring MVC的拦截器HandlerInterceptor
    1. HandlerMethod介绍HandlerMethod它作为SpringMVC的非公开API,可能绝大多数小伙伴都对它比较陌生,但我相信你对它又不是那么的生疏,因为你可能没用过但肯定见过。比如SpringMVC的拦截器HandlerInterceptor的拦截方法的第三个入参Objecthandler,虽然它是Object类型,但其实绝大部......
  • SpringBoot中Bean的条件装配
    目录概述ProfileConditionalConditionalOnConditionalOnProperty概述众所周知,SpringBoot最腻害的地方就是容器,开发人员的日常工作就是编写bean,并由框架扫描存到容器里面,当程序跑起来的时候,各种bean协同工作完成了软件功能。那么容器是什么呢?从概念层面来讲,容器是一个池子;从物......
  • 使用Spring Data JPA实现审计功能,记录创建人、创建时间、最后修改时间和最后修改人
    目录前言近日心血来潮想做一个开源项目,目标是做一款可以适配多端、功能完备的模板工程,包含后台管理系统和前台系统,开发者基于此项目进行裁剪和扩展来完成自己的功能开发。本项目为前后端分离开发,后端基于Java21和SpringBoot3开发,后端使用SpringSecurity、JWT、SpringDataJP......
  • SpringBoot中集成XXL-JOB分布式任务调度平台,轻量级、低侵入实现定时任务
    场景XXL-JOBhttps://www.xuxueli.com/xxl-jobXXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。特性:1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;2、动态:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生......
  • SpringBoot整合Redis
    1、pom.xml中引入redis依赖<!--Redis依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>2、application.yml配置文件中配置Redis连接参数等s......