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


查看离线接口文档





目录
相关文章
|
4月前
|
安全 Java Ruby
我尝试了所有后端框架 — — 这就是为什么只有 Spring Boot 幸存下来
作者回顾后端开发历程,指出多数框架在生产环境中难堪重负。相比之下,Spring Boot凭借内置安全、稳定扩展、完善生态和企业级支持,成为构建高可用系统的首选,真正经受住了时间与规模的考验。
356 2
|
3月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
5月前
|
XML JSON Java
Spring框架中常见注解的使用规则与最佳实践
本文介绍了Spring框架中常见注解的使用规则与最佳实践,重点对比了URL参数与表单参数的区别,并详细说明了@RequestParam、@PathVariable、@RequestBody等注解的应用场景。同时通过表格和案例分析,帮助开发者正确选择参数绑定方式,避免常见误区,提升代码的可读性与安全性。
|
6月前
|
Java Spring
聊聊你对SpringBoot框架的理解 ?
SpringBoot是Spring家族中流行的子项目,旨在简化Spring框架开发的繁琐配置。它主要提供三大功能:starter起步依赖简化依赖管理,自动配置根据条件创建Bean,以及内嵌Web服务器支持Jar包运行,极大提升了开发效率。
197 0
|
3月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
172 8
|
4月前
|
监控 Kubernetes Cloud Native
Spring Batch 批处理框架技术详解与实践指南
本文档全面介绍 Spring Batch 批处理框架的核心架构、关键组件和实际应用场景。作为 Spring 生态系统中专门处理大规模数据批处理的框架,Spring Batch 为企业级批处理作业提供了可靠的解决方案。本文将深入探讨其作业流程、组件模型、错误处理机制、性能优化策略以及与现代云原生环境的集成方式,帮助开发者构建高效、稳定的批处理系统。
535 1
|
6月前
|
安全 Java 微服务
Java 最新技术和框架实操:涵盖 JDK 21 新特性与 Spring Security 6.x 安全框架搭建
本文系统整理了Java最新技术与主流框架实操内容,涵盖Java 17+新特性(如模式匹配、文本块、记录类)、Spring Boot 3微服务开发、响应式编程(WebFlux)、容器化部署(Docker+K8s)、测试与CI/CD实践,附完整代码示例和学习资源推荐,助你构建现代Java全栈开发能力。
720 0
|
5月前
|
Cloud Native Java API
Java Spring框架技术栈选和最新版本及发展史详解(截至2025年8月)-优雅草卓伊凡
Java Spring框架技术栈选和最新版本及发展史详解(截至2025年8月)-优雅草卓伊凡
1121 0
|
6月前
|
NoSQL Java 数据库连接
SpringBoot框架
Spring Boot 是 Spring 家族中最流行的框架,旨在简化 Spring 应用的初始搭建与开发。它通过自动配置、起步依赖和内嵌服务器三大核心功能,大幅减少配置复杂度,提升开发效率。开发者可快速构建独立运行的 Web 应用,并支持多种数据访问技术和第三方集成。
|
7月前
|
Java API 网络架构
基于 Spring Boot 框架开发 REST API 接口实践指南
本文详解基于Spring Boot 3.x构建REST API的完整开发流程,涵盖环境搭建、领域建模、响应式编程、安全控制、容器化部署及性能优化等关键环节,助力开发者打造高效稳定的后端服务。
1059 1