springboot 2.4.0 knife4j 3.0.1 接口文档框架

简介: 本文介绍了 springboot 2.4.0 框架集成 knife4j 3.0.1 接口文档框架的流程。springboot 的 pom 文件中引入依赖;启动类上加入 Knife4j 的注解;配置扫描 api 接口;在 model 类和 controller 中加入注解

原 springboot 启动类

publicstaticvoidmain(String[] args) {
ConfigurableApplicationContextapplication=SpringApplication.run(Kinfe4jApplication.class, args);
Environmentenv=application.getEnvironment();
Stringhost=null;
try {
host=InetAddress.getLocalHost().getHostAddress();
        } catch (UnknownHostExceptione) {
logger.error("获取当前服务器HOST失败:{}",e);
e.printStackTrace();
        }
StringspringApplicationName=env.getProperty("spring.application.name");
Stringport=env.getProperty("server.port");
StringcontextPath=env.getProperty("server.servlet.context-path");
StringportAndContextPath=null;
StringapplicationName="未获取服务名称";
if (null!=applicationName){
applicationName=springApplicationName;
        }
if (null==contextPath){
portAndContextPath=port;
        }else {
portAndContextPath=port+contextPath;
        }
logger.info("\n----------------------------------------------------------\n\t"+"Application '{}' is Running! Access URLs:\n\t"+"Local: \t\thttp://localhost:{}\n\t"+"External: \thttp://{}:{}\n\t"+"Doc: \thttp://{}:{}/doc.html\n\t"+"----------------------------------------------------------",
applicationName,
portAndContextPath,
host,portAndContextPath,
host,portAndContextPath);
    }

Knife4j 配置类

springboot 启动类上增加注解

@Configuration@EnableSwagger2@EnableKnife4j@Import(BeanValidatorPluginsConfiguration.class)

knife4j 配置类中扫描所有 api

/*** https://gitee.com/xiaoym/swagger-bootstrap-ui-demo/blob/master/swagger-bootstrap-ui-demo/src/main/java/com/swagger/bootstrap/ui/demo/config/SwaggerConfiguration.java* 默认访问工程下所有api* 注意:web包下子包的类的类名,注解@RequestMapping("/v1")的映射地址,均不能相同* @return*/@Bean(value="defaultApi")
publicDocketdefaultApi() {
//分组/版本,名称StringgroupName="1.0.0版本";
Stringauthor="Huang Min";
StringhomePage="https://www.yuque.com/huangmins/java/hcds4q";
Stringemail="huangmin@exc-led.com";
Stringtitle="多媒体文件处理服务的接口";
Stringdescription="多媒体文件处理服务 RESTful APIs";
StringtermsOfServiceUrl="https://www.yuque.com/huangmins/java/hcds4q";
Stringversion="1.0.0";
Contactcontact=newContact(author, homePage, email);
ApiInfoapiInfo=newApiInfoBuilder()
                .title(title)
                .description(description)
                .termsOfServiceUrl(termsOfServiceUrl)
                .contact(contact)
                .version(version)
                .build();
Docketdocket=newDocket(DocumentationType.SWAGGER_2)
// 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)                .apiInfo(apiInfo)
                .groupName(groupName)
// 设置哪些接口暴露给Swagger展示                .select()
// 扫描所有有注解的api,用这种方式更灵活                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
// 扫描所有 .apis(RequestHandlerSelectors.any())                .paths(PathSelectors.any())
                .build();
returndocket;
    }

knife4j 配置类扫描指定包 api

/*** 上海50所的接口测试1** @return*/@Bean(value="packageApiV2")
publicDocketpackageApiV2() {
//分组/版本,名称StringgroupName="V2版本";
Stringauthor="Huang Min";
StringhomePage="https://doc.xiaominfo.com/guide/";
Stringemail="huangmin@exc-led.com";
Stringtitle="多媒体文件处理服务的接口";
Stringdescription="多媒体文件处理服务 RESTful APIs";
StringtermsOfServiceUrl="https://www.yuque.com/huangmins/java/hcds4q";
Stringversion="1.2.0";
StringbasePackage="com.exc.kinfe4j.web.v2";
Knife4jDTOknife4jDTO=newKnife4jDTO(groupName, author, homePage, email, title, description, termsOfServiceUrl, version, basePackage);
Docketdocket=createDocket(knife4jDTO);
returndocket;
    }
/*** 上海50所的接口测试2** @return*/@Bean(value="packageApiV3")
publicDocketpackageApiV3() {
//分组/版本,名称StringgroupName="50所V3";
Stringauthor="Huang Min";
StringhomePage="https://doc.xiaominfo.com/guide/";
Stringemail="huangmin@exc-led.com";
Stringtitle="多媒体文件处理服务的接口";
Stringdescription="多媒体文件处理服务 RESTful APIs";
StringtermsOfServiceUrl="https://www.yuque.com/huangmins/java/hcds4q";
Stringversion="1.3.0";
StringbasePackage="com.exc.kinfe4j.web.v3";
Knife4jDTOknife4jDTO=newKnife4jDTO(groupName, author, homePage, email, title, description, termsOfServiceUrl, version, basePackage);
Docketdocket=createDocket(knife4jDTO);
returndocket;
    }
/*** 创建 Docket** @param knife4jDTO* @return Docket*/privateDocketcreateDocket(Knife4jDTOknife4jDTO) {
StringgroupName=knife4jDTO.getGroupName();
Stringauthor=knife4jDTO.getAuthor();
StringhomePage=knife4jDTO.getHomePage();
Stringemail=knife4jDTO.getEmail();
Stringtitle=knife4jDTO.getTitle();
Stringdescription=knife4jDTO.getDescription();
StringtermsOfServiceUrl=knife4jDTO.getTermsOfServiceUrl();
Stringversion=knife4jDTO.getVersion();
StringbasePackage=knife4jDTO.getBasePackage();
Contactcontact=newContact(author, homePage, email);
ApiInfoapiInfo=newApiInfoBuilder()
                .title(title)
                .description(description)
                .termsOfServiceUrl(termsOfServiceUrl)
                .contact(contact)
                .license("exc-led")
                .licenseUrl("https://www.exc-led.com/")
                .version(version)
                .build();
Docketdocket=newDocket(DocumentationType.SWAGGER_2)
// 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)                .apiInfo(apiInfo)
                .groupName(groupName)
// 设置哪些接口暴露给Swagger展示                .select()
                .apis(RequestHandlerSelectors.basePackage(basePackage))
// 扫描所有 .apis(RequestHandlerSelectors.any())                .paths(PathSelectors.any())
                .build();
returndocket;
    }


实体类的注解

#实体类的注解,声明被knife4j管理@ApiModel#字段的注解,example:默认参数@ApiModelProperty(value="返回码", example="200",notes="返回200,400")

Controller 接口的注解参数

#接口类的注解@Api#接口的注解@ApiOperation#参数列表的注解@ApiImplicitParams#每一个参数的注解@ApiImplicitParam

Controller 接口的排序

#类的排序,注解ApiSort,参数int类型参数,未添加该注解的排序在后@ApiSort(3)
#接口的排序,注解@ApiOperationSupport(order=3),order参数int类型,未添加该注解的排序在后@ApiOperationSupport(order=2)

配置文件

spring:
application:
name: Knife4j-3.x#接口文档系统配置knife4j:
#true:启用knife4j增强模式, false:不启用knife4j增强模式enable: true#是否开启生产环境保护策略,生产环境下禁止访问接口文档系统,生产环境设置为true,开发环境设置为false,
production: false#对Knife4j提供的资源提供BasicHttp校验,保护文档;production配置为true时,basic认证功能不可用basic:
#开启BasicHttp功能enable: falseusername: adminpassword: 123321#是否开启一个默认的跨域配置,该功能配合自定义Host使用,cors: true#cors: true#增强模式配置https://doc.xiaominfo.com/knife4j/enhance.html

pom.xml 配置

<properties><guava.version>27.0.1-jre</guava.version><knife4j.version>3.0.1</knife4j.version><knife4j.annotations.version>1.5.22</knife4j.annotations.version><java.version>1.8</java.version></properties><!-- knife4j 接口文档  --><dependencies><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>${knife4j.version}</version><exclusions><!-- 排除版本冲突的guava --><exclusion><artifactId>guava</artifactId><groupId>com.google.guava</groupId></exclusion><!-- 排除版本冲突的swagger-annotations --><exclusion><artifactId>swagger-annotations</artifactId><groupId>io.swagger</groupId></exclusion></exclusions></dependency><!-- 重新引入指定版本的swagger-annotations --><dependency><groupId>io.swagger</groupId><artifactId>swagger-annotations</artifactId><version>${knife4j.annotations.version}</version></dependency><!-- 引入guava并发编程框架 --><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>${guava.version}</version></dependency></dependencies>

GitHub 工程示例

下载链接

https://github.com/huangmins/knife4j.git

启动工程

下载工程后, 导入 idea, 启动成功, 如下图所示:


knife4j 系统

进入系统页面

切换接口分组


下载查看离线接口文档

下载指定分组的离线接口文档


下载 typora 工具📎typora-setup-x64.zip


下载 typora 工具📎typora-setup-x64.zip


查看离线接口文档





目录
相关文章
|
19天前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
1月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
42 4
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
144 1
|
29天前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
35 0
|
23天前
|
前端开发 Java 数据库连接
Spring 框架:Java 开发者的春天
Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。
43 1
Spring 框架:Java 开发者的春天
|
10天前
|
JSON JavaScript 前端开发
springboot中使用knife4j访问接口文档的一系列问题
本文介绍了在Spring Boot项目中使用Knife4j访问接口文档时遇到的一系列问题及其解决方案。作者首先介绍了自己是一名自学前端的大一学生,熟悉JavaScript和Vue,正在向全栈方向发展。接着详细说明了如何解决Swagger请求404错误,包括升级Knife4j依赖、替换Swagger 2注解为Swagger 3注解以及修改配置类中的代码。最后,针对报JS错误的问题,提供了删除消息转换器代码的解决方法。希望这些内容能对读者有所帮助。
|
16天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
34 2
|
15天前
|
消息中间件 NoSQL Java
springboot整合常用中间件框架案例
该项目是Spring Boot集成整合案例,涵盖多种中间件的使用示例,每个案例项目使用最小依赖,便于直接应用到自己的项目中。包括MyBatis、Redis、MongoDB、MQ、ES等的整合示例。
65 1
|
23天前
|
Java 数据库连接 开发者
Spring 框架:Java 开发者的春天
【10月更文挑战第27天】Spring 框架由 Rod Johnson 在 2002 年创建,旨在解决 Java 企业级开发中的复杂性问题。它通过控制反转(IOC)和面向切面的编程(AOP)等核心机制,提供了轻量级的容器和丰富的功能,支持 Web 开发、数据访问等领域,显著提高了开发效率和应用的可维护性。Spring 拥有强大的社区支持和丰富的生态系统,是 Java 开发不可或缺的工具。
|
30天前
|
人工智能 开发框架 Java
总计 30 万奖金,Spring AI Alibaba 应用框架挑战赛开赛
Spring AI Alibaba 应用框架挑战赛邀请广大开发者参与开源项目的共建,助力项目快速发展,掌握 AI 应用开发模式。大赛分为《支持 Spring AI Alibaba 应用可视化调试与追踪本地工具》和《基于 Flow 的 AI 编排机制设计与实现》两个赛道,总计 30 万奖金。