Springboot使用Knife4j

2023-11-06

简述:knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案。
knife4j的前身是 swagger-bootstrap-ui,为了契合微服务的架构发展,由于原来 swagger-bootstrap-ui采用的是后端Java代码+前端Ui混合打包的方式,在微服务架构下显的很臃肿,因此项目正式更名为knife4j。
knife4j官方网址:
knife4j

搭建环境:java-8 、springboot 2.5.10、Gradle 7.4

推荐意见:使用插件其目的是为了简化内部对接,便利测试和前端调试,以及简化的解决程序员编写文档,在本地环境和测试环境可以使用,考虑到安全问题不要暴露在正式环境。
Knife4j 分为多个版本 每个版本对应的依赖包不同,使用时请阅读官方文档,避免踩坑。



项目工程截图:

Gradle配置:

plugins {
    id 'org.springframework.boot' version '2.5.10'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'com.demo'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
    mavenCentral()
}

ext {
    lombokVersion = '1.16.18'
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    // knife4j
    implementation group: 'com.github.xiaoymin', name: 'knife4j-spring-boot-starter', version: '3.0.3'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    //lombok
    implementation("org.projectlombok:lombok:$lombokVersion")
    compileOnly("org.projectlombok:lombok:$lombokVersion")
    annotationProcessor("org.projectlombok:lombok:$lombokVersion")
}

tasks.named('test') {
    useJUnitPlatform()
}

springboot 配置knife4j:

package com.demo.config;

import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
@EnableKnife4j
@Import(BeanValidatorPluginsConfiguration.class)
public class Knife4jConfig {

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .useDefaultResponseMessages(false)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.demo.controller"))
                .paths(PathSelectors.any())
                .build();

    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .description("接口测试文档")
                .contact(new Contact("beyourself", "https://blog.csdn.net/qq_27535933", "310857864@qq.com"))
                .version("v1.0")
                .title("API测试文档")
                .build();
    }
}

测试demo: 

package com.demo.controller;

import com.demo.service.request.User;
import io.swagger.annotations.*;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;

@RestController
@Api(tags = "用户接口")//描述UserController的信息
public class UserController {

    @ApiOperation(value = "查询用户", notes = "根据id查询用户")
    @ApiImplicitParam(paramType = "path", name = "id", value = "用户id", required = true)
    @GetMapping("/user/query/{userId}")
    public String getUserById(@PathVariable Integer userId) {
        return "/user/" + userId;
    }

    @ApiResponses({
            @ApiResponse(code = 200, message = "删除成功"),
            @ApiResponse(code = 500, message = "删除失败")})
    @ApiOperation(value = "删除用户", notes = "根据id删除用户")
    @DeleteMapping("/user/delete/{id}")
    public Integer deleteUserById(@PathVariable Integer id) {
        return id;
    }

    @ApiOperation(value = "添加用户", notes = "添加一个用户,传入用户名和性别")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", name = "username", value = "用户名", required = true, defaultValue = "张三"),
            @ApiImplicitParam(paramType = "query", name = "sex", value = "性别", required = true, defaultValue = "女")
    })
    @PostMapping("/user")
    public String addUser(@RequestParam String username, @RequestParam String sex) {
        return username + "," + sex;
    }

    @ApiOperation(value = "修改用户", notes = "根据传入的用户信息修改用户")
    @PutMapping("/user")
    public String updateUser(@RequestBody User user) {
        return user.toString();
    }

    @GetMapping("/ignore")
    @ApiIgnore
    public void ignoreMethod() {
    }
    
}

效果图:


文档描述:

 设置安全密码登录配置:

server.port=8081
knife4j.enable=true
knife4j.basic.enable=true
knife4j.basic.username=admin
knife4j.basic.password=admin
knife4j.setting.language=zh-CN

登录界面:

赚点积分下载地址: Springboot使用Knife4j-Java文档类资源-CSDN下载
已放在资源上用于做demo测试, 有需要的小伙伴可以自行下载,有问题可以及时评论,如没有积分的小伙伴评论提供邮箱地址 每天登录看到会后及时发送字,感谢各位。
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Springboot使用Knife4j 的相关文章

  • 在 Java/Android 中检查字符串是否包含 URL 的最佳方法是什么?

    在 Java Android 中检查字符串是否包含 URL 的最佳方法是什么 最好的方法是检查字符串是否包含 com net org info 其他 或者有更好的方法吗 url 输入到 Android 中的 EditText 中 它可以是粘
  • 为什么这不会绘制图像?

    我想做的是 当我运行应用程序时 它会启动线程并且图像显示 3 秒 3000 毫秒 然后线程停止运行 图片路径正确 图片文件存在 线程本身运行 但是 图像似乎没有显示 可能出什么问题了 这是我的代码 package org main impo
  • javax.naming.NameNotFoundException

    我正在 JBoss 5 容器中运行 ejb 示例 我正在使用一个例子从这里开始 第一部分 http www roseindia net jboss jboss 3 2 shtml 在示例中 我在 JBoss 中部署了 bean 并在 Tom
  • JUnit 测试方法无法返回值

    为什么 JUnit 测试方法无法返回值 文档 https junit org junit5 docs current user guide writing tests classes and methods说 强调我的 测试方法和生命周期方
  • Tomcat:具有强密码的 TLSv1.2 不起作用

    我安装了Tomcat 7 配置了对 TLSv1 2 的支持在端口 8443 上 我的连接器配置 协议 org apache coyote http11 Http11NioProtocol SSLEnabled true 方案 https 安
  • 如何在 Java 中用 \n 替换 \\n

    我有一个string test first n middle n last 现在我想更换所有 n by n 我试过了test replaceAll n n and test replaceAll n n 但它们不起作用 有人有解决办法吗 T
  • 关于java中同步的问题;何时/如何/到什么程度

    我正在开发我的第一个多线程程序 并在同步的几个方面陷入困境 我已经浏览了 oracle sun 主页上的多线程教程 以及这里的一些关于 SO 的问题 所以我相信我知道什么是同步 然而 正如我提到的 有几个方面我不太确定如何弄清楚 我以明确问
  • 清理 IntelliJ 中构建的 Play 框架

    我有一个拼写错误conf routes文件导致 Play Framework 生成错误命名的类 重建项目并运行Invalidate Caches并没有解决 IntelliJ 中的问题 当我手动运行时重新生成了不正确的类文件play clea
  • Spring Data (JPA) 多个存储库,没有很多类

    在我当前的项目中 我使用 Spring Data JPA 并且有 20 多个 Entity类 我想为它们创建存储库 但创建另一个类 每个类适用于任何模型 Repository注释似乎是某种矫枉过正和大量 重复 代码 所有存储库类将如下所示
  • 测试 Hessian remoting-servlet.xml

    我们使用 Hessian 来实现富客户端和服务器之间的通信 由于移动和重命名 remoting servlet xml 中的条目有时会与实际的类名不匹配 因此 我正在寻找一种简单的方法来测试远程处理 xml 有没有简单的方法可以做到这一点
  • 如何自定义 JFrame 上的标题栏?

    我想在我的 Java Swing 桌面应用程序中拥有一个自定义的标题栏 最好的方法是什么 我可以通过在 JFrame 的构造函数中使用以下代码来使用 Swing 标题栏 this setUndecorated true this getRo
  • 在单独的模块中使用 Spring AOP 方面

    我在一个 Maven 项目模块中有一个方面 com x NiceAspect 在一个单独的 Maven 模块中有一个类 com x NiceClass 这些模块具有相同的 POM 父级 共同创建一个项目 我想要实现的目标是拥有一个通用的方面
  • Android 改造参数化@Headers

    我正在使用 OAuth 每次发出请求时都需要将 OAuth 令牌放入标头中 我看到 Header注释 但是有没有办法让它参数化 以便我可以在运行时传入 这是概念 Header Authorization OAuth var api vers
  • Spring-data-cassandra:创建名称为“sessionFactory”的 bean 时出错,并且无法解析对 bean“cassandraTemplate”的引用

    我有一个 springboot 应用程序 在其中连接到 cassandra DB 我的 pom xml parent gt
  • 具有多个注释的方法上的 AspectJ 切入点

    使用加载时编织 纯 AspectJ 我们有2个注释 Time and Count 以及一些带注释的方法 Time name myMethod1Time Count name myMethod1Count public void myMeth
  • Android:如何停止监听电话监听器? [复制]

    这个问题在这里已经有答案了 可能的重复 Android 为什么 PhoneCallListener 在活动完成后仍然存在 https stackoverflow com questions 11666853 android why phon
  • android中ScrollView中的图像

    在我的应用程序中 我想放置一个 png 文件 并且希望它在横向和纵向模式下都被视为滚动图像 请建议代码或示例 要使您的 Imageview 在高度不适合时滚动 您可以在 xml 中的 ScrollView 内添加一个 ImageView 并
  • 为什么我们在同一台服务器上使用多个应用程序服务器实例

    我想这是有充分理由的 但我不明白为什么有时我们会在同一物理服务器上放置例如 5 个具有相同 Web 应用程序的实例 这与多处理器架构的优化有关吗 JVM 或其他允许的最大内存限制 嗯 过了很长一段时间我又看到这个问题了 一台机器上的多个 J
  • Java并发锁和条件的使用

    我可以用object wait object notify and synchronized blocks解决生产者消费者类型的问题 同时我可以使用locks and conditions from java util concurrent
  • Java:将秒转换为分钟、小时和天[重复]

    这个问题在这里已经有答案了 任务是 输出应如下所示 最好回显输入 您输入了 500 000 秒 即 5 天 18 小时 53 分钟 20 秒 5天18 53 20小时 我该怎么做呢 最容易理解和做到的方法是什么 讲师还说 没有硬编码 我不太

随机推荐

  • 09 线性回归及矩阵运算

    09 线性回归及矩阵运算 线性回归 定义 通过一个或者多个自变量与因变量之间进行建模的回归分析 其中可以为一个或者多个自变量之间的线性组合 一元线性回归 涉及到的变量只有一个 多元线性回归 变量两个或以上 通用公式 h w w0 w1x1
  • kafka生产者幂等与事务

    目录 前言 幂等 事务 总结 参考资料 前言 Kafka 消息交付可靠性保障以及精确处理一次语义的实现 所谓的消息交付可靠性保障 是指 Kafka 对 Producer 和 Consumer 要处理的消息提供什么样的承诺 常见的承诺有以下三
  • 【杨氏矩阵】

    文章目录 前言 一 题目描述 二 题目解析 一 解法1 二分查找 二 解法2 Step wise线性搜索解法 总结 前言 大家好 我是熊猫 今天要和大家一起学习的是在杨氏矩阵中寻找数字的问题 一 题目描述 有一个数字矩阵 矩阵的每行从左到右
  • centos和ubantu安装软件的区别

    序言 安装软件时经常会遇到类似下面这张图 那这些不同的Linux版本有哪些区别 安装软件又应该注意哪些 本文将就以下问题展开讨论 Linux发行版本有哪些 Linux不同版本安装软件的方式和区别 说明 图中FreeBSD Oracle So
  • 小技巧:如何在R语言与excel/word之间进行复制粘贴

    原创 康哥 勤用统计 问 R语言中能进行类似电脑中control C control V的操作吗 现实数据处理过程中 经常需要进行R语言与Excel word等文件的数据传输 笨方法 是直接导出or导入整个文件 答 R语言也可以与Excel
  • [蓝桥杯][算法提高VIP]我们的征途是星辰大海

    题目 题目链接 题解 实现题 这也很基础 写代码的时候细心点就行 代码 include
  • 时序预测

    时序预测 MATLAB实现PSO BP时间序列预测 粒子群优化BP神经网络时间序列预测 多指标评价 目录 时序预测 MATLAB实现PSO BP时间序列预测 粒子群优化BP神经网络时间序列预测 多指标评价 效果一览 基本介绍 程序设计 参考
  • 动态路由协议

    动态路由协议 在各台路由器上 激活同一种协议后 路由器间沟通计算获取未知路由信息 最终生成路由表实现全网可达 静态协议的缺点 1 在中大型网络中配置量大 2 不能实时收敛 不能基于拓扑的变化而变化 动态协议的优点 1 在中大型的配置量较静态
  • CRM-统计分析--线索统计--新增线索数量折线图(接口实现)

    统计分析 线索统计 新增线索数量折线图 需求 统计出一段时间内的每一天 新增的线索数量 通过每天新增的线索数量和线索总数量 分析线上线下活动的执行情况 难度级别 B级 接口名 report salesStatistics 请求方式 get请
  • 个人免签支付云端监听免挂机支付宝收款

    GOGO支付 打不开了 貌似liangle 然后自己根据原理实现了一套 方案用来替代 gogo支付收款 云端监听免挂机 支付宝采用抓包技术云端调用官方接口 获取收款信息 监听效率非常高 而且很稳定 GOGO支付个人免签支付系统实现原理说明
  • 让flexmojos modulefiles支持通配符文件集,模块输出不带版本号且按包结构输出

    jar包下载 http download csdn net source 1879817 1 从http svn sonatype org flexmojos tags flexmojos 3 2 0 check out 源码 2 修改fl
  • 《Attention Is All You Need》

    论文地址 https arxiv org abs 1706 03762 谷歌于2017年发布论文 Attention Is All You Need 提出了一个只基于attention的结构来处理序列模型相关的问题 比如机器翻译 相比传统的
  • 什么是Base64

    一 什么是Base64 百度百科中对Base64有一个很好的解释 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一 Base64就是一种基于64个可打印字符来表示二进制数据的方法 什么是 可打印字符 呢 为什么要用它来传输8
  • logback mdc日志跟踪

    1 简介 MDC Mapped Diagnostic Context 映射调试上下文 是 log4j logback及log4j2 提供的一种方便在多线程条件下记录日志的功能 MDC 可以看成是一个与当前线程绑定的哈希表 可以往其中添加键值
  • 图象恢复——(逆滤波,维纳滤波)

    目的 对获取图像在频域用高斯函数进行退化并叠加白噪声 对退化图像进行逆滤波和维纳滤波恢复 比较原始图像和恢复图像 对利用逆滤波和维纳滤波恢复方法恢复图像进行比较 一 基本原理 图像复原是一种客观的操作 通过使用退化现象的先验知识重建或恢复一
  • Windows上Kafka运行环境安装

    1 安装JDK 1 1 安装文件 http www oracle com technetwork java javase downloads index html 下载JDK 1 2 安装完成后需要添加以下的环境变量 右键点击 我的电脑 g
  • Daily Scrum: 2012/11/12

    由于我们是从10月31日开始进行Daily Scrum的 所以我们的Daily Scrum时间段为10 31 11 12共10天 包括一天周六 成员 角色 今天工作 明天计划 王安然 PM Dev 完成了EnermyCraft抽象类 并进行
  • 毕业设计-基于深度学习的命名实体识别研究

    目录 目录 前言 课题背景和意义 实现技术思路 一 命名实体识别简单概述 二 基于深度学习的命名实体识别方法 实现结果 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精
  • 打包第三库那些事

    介绍 一般来说 写完一个第三方库需要打包出三个文件夹的文件 对应三种不同模块类型 outputpath dist umd module es es module lib commonjs module 三个模块类型 umd UMD Univ
  • Springboot使用Knife4j

    简述 knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案 knife4j的前身是 swagger bootstrap ui 为了契合微服务的架构发展 由于原来 swagger bootstrap ui采用的