相关
简化代码的Lombok(跳转)

文章目录

  • 一、Knife4j
  • 二、环境准备
    • 1.引入依赖
    • 2.添加配置
    • 3.设置配置类
    • 4.运行访问
  • 三、基本用法
    • 1.控制器
    • 2.封装类
  • 四、效果演示
  • 五、其它
    • 1. 生成本地API文件
    • 2. 全局参数设置

一、Knife4j

Knife4j是国人开发的一个基于Swagger2的在线文档框架, 可以说是Swagger的升级版的API文档框架, 它可以扫描控制器所在的包, 并解析每一个控制器及其内部的处理请求的方法, 生成在线API文档, 为前后端的开发人员的沟通提供便利

二、环境准备

1.引入依赖

创建SpringBoot项目, 勾选Spring web框架 , 并在pom.xml中添加依赖:

<!-- Knife4j在线API文档的依赖 -->
<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>2.0.9</version>
</dependency>
<!-- lombok依赖包, 用于简化代码 -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>

2.添加配置

引入依赖后, 在application.properties中添加配置:

#启用knife4j增强模式
knife4j.enable=true
#生产模式屏蔽, true将禁止访问API在线文档, false可以看到文档, 密码失效
knife4j.production=false
#Basic认证功能,即是否需要通过用户名、密码验证后才可以访问在线API文档
knife4j.basic.enable=true
#如果开启Basic认证却未配置用户名与密码,默认是:admin/123321, 即使输入对了, 也会一直循环
knife4j.basic.username=root
knife4j.basic.password=root
#为了节省流量, 返回数据时, 配置不返回属性值为null的数据
spring.jackson.default-property-inclusion=non_null

3.设置配置类

以上两步完成后, 在项目配置包下创建Knife4jConfiguration.class

package cn.qingtian.knife4j.config;import com.github.xiaoymin.knife4j.spring.extension.OpenApiExtensionResolver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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.EnableSwagger2WebMvc;/*** Knife4j(Swagger2)的配置*/
@Configuration
@EnableSwagger2WebMvc
public class Knife4jConfiguration {/*** 【重要】指定Controller包路径*/private String basePackage = "cn.qingtian.knife4j.controller";/*** 分组名称*/private String groupName = "base-knife4j";/*** 主机名*/private String host = "http://java.qingtian.cn";/*** 标题*/private String title = "API在线文档工具";/*** 简介*/private String description = "Knife4j演示";/*** 服务条款URL*/private String termsOfServiceUrl = "http://www.apache.org/licenses/LICENSE-2.0";/*** 联系人*/private String contactName = "项目研发部";/*** 联系网址*/private String contactUrl = "http://java.qingtian.cn";/*** 联系邮箱*/private String contactEmail = "java@qingtian.cn";/*** 版本号*/private String version = "1.0.0";@Autowiredprivate OpenApiExtensionResolver openApiExtensionResolver;@Beanpublic Docket docket() {String groupName = "1.0.0";Docket docket = new Docket(DocumentationType.SWAGGER_2).host(host).apiInfo(apiInfo()).groupName(groupName).select().apis(RequestHandlerSelectors.basePackage(basePackage)).paths(PathSelectors.any()).build().extensions(openApiExtensionResolver.buildExtensions(groupName));return docket;}private ApiInfo apiInfo() {return new ApiInfoBuilder().title(title).description(description).termsOfServiceUrl(termsOfServiceUrl).contact(new Contact(contactName, contactUrl, contactEmail)).version(version).build();}}

4.运行访问

前三步完成后, 启动此项目, 在浏览器上访问http://localhost:8080/doc.html, 输入账号密码= root/root

三、基本用法

1.控制器

  • Api : 添加在控制类上, 通过tags属性, 可以指定此控制器的名称, 还可以在tags上添加序号, 控制各控制器之间的排序, 如"1. 管理员模块" "2. 评论模块" Knife4j框架会自动进行排序
  • @ApiOperation : 添加在控制器类中的处理方法上, 用于配置方法在API文档中的名称, 如@ApiOperation("增加管理员")
  • @ApiOperationSupport : 添加在控制器类的处理方法上, 通过属性order, 可配置在本控制器上此方法的显示排序, 建议增(order=10), 删(order=20), 改(order=30), 查(order=40)
  • @ApiImplicitParam : 添加在控制器类的处理方法上, 可以配置此方法参数在API文档中的显示, 属性name方法名 value方法描述 required是否必须 dataType参数类型 example参数示例
  • @ApiImplicitParams : 添加在控制器类的处理方法上, 与@ApiImplicitParam配合使用, 用于有多个参数的方法, 如@ApiImplicitParams(@ApiImplParam(参数1配置), @ApiImplParam(参数2配置))

2.封装类

  • @ApiModel : 添加在封装类上, 用于配置封装类在API文档中的名称, 如@ApiModel("用户数据")
  • @ApiModelProperty : 添加在封装类中的属性上, 用于配置封装类在API文档中的显示, 常用属性value属性名称 required是否必须 exampl参数实例 dataType参数类型

在自定义的封装类中, 必须有GET和SET方法, 不然会出现 406-文件不可被接收错误

四、效果演示

cn.qingtian.knife4j下创建包pojo, 在pojo下创建dto和vo并创建以下类

package cn.qingtian.knife4j.pojo.dto;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;import java.io.Serializable;@Data
@ApiModel("用户DTO")
public class UserDTO implements Serializable {@ApiModelProperty(value = "用户账号",example = "java1234567", required = true)private String username;@ApiModelProperty(value = "用户密码",example = "12345678", required = true)private String password;
}
package cn.qingtian.knife4j.pojo.vo;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;import java.io.Serializable;@Data
@ApiModel("用户VO")
public class UserVO implements Serializable {@ApiModelProperty(name = "username",value = "用户账号",example = "java1234567")private String username;@ApiModelProperty(name = "password",value = "用户密码",example = "12345678")private String password;
}

cn.qingtian.knife4j下创建包response, 并创建以下类

package cn.qingtian.knife4j.response;/*** 枚举类, 定义本项目的业务返回码*/
public enum ResponseCode {OK(200),BAD_REQUEST(400),UNAUTHORIZED(401),FORBIDDEN(403),NOT_FOUND(404),NOT_ACCEPTABLE(406),CONFLICT(409),INTERNAL_SERVER_ERROR(500);private Integer value;ResponseCode(Integer value) {this.value = value;}public Integer getValue(){return value;}
}
package cn.qingtian.knife4j.response;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;import java.io.Serializable;@Data
@ApiModel("通用业务响应数据")
public class JsonResult<T> implements Serializable {// 业务返回码@ApiModelProperty(name = "state",value = "业务返回码",example = "401 402 403", position = 1)private Integer state;// 业务消息@ApiModelProperty(name = "message",value = "业务消息",example = "请求参数格式错误, 密码错误",position = 2)private String message;// 业务数据@ApiModelProperty(name = "data",value = "业务数据",example = "3")private T data;// 构造方法私有化, 限制此类创建规则private JsonResult(){}// 处理成功返回结果public static <T> JsonResult<T> ok(T data){JsonResult<T> jsonResult = new JsonResult<>();jsonResult.state = ResponseCode.OK.getValue();jsonResult.data = data;return jsonResult;}public static JsonResult<Void> ok(String message){JsonResult<Void> jsonResult = new JsonResult<>();jsonResult.state = ResponseCode.OK.getValue();jsonResult.message = message;return jsonResult;}// 处理成功返回结果, 没有返回消息和返回数据public static JsonResult<Void> ok(){return ok(null);}// 处理失败返回的结果, 返回结果一般有错误信息和业务返回码, 不包含处理数据结果public static JsonResult<Void> fail(ResponseCode state, String message){JsonResult<Void> jsonResult = new JsonResult<>();jsonResult.state = state.getValue();jsonResult.message = message;return jsonResult;}
}

cn.qingtian.knife4j下创建包controller, 并创建以下类

package cn.qingtian.knife4j.controller;import cn.qingtian.knife4j.pojo.dto.UserDTO;
import cn.qingtian.knife4j.pojo.vo.UserVO;
import cn.qingtian.knife4j.response.JsonResult;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;import java.util.ArrayList;
import java.util.List;@RestController
@RequestMapping("/user")
@Api(tags = "1. 用户管理模块")
public class UserController {@ApiOperation(value = "增加用户")@ApiOperationSupport(order = 10)@PostMapping("/add-new")public UserVO addNew(UserDTO userDTO){UserVO userVO = new UserVO();userVO.setUsername("root");userVO.setPassword("root");return userVO;}@ApiOperation(value = "删除用户")@ApiOperationSupport(order = 20)@ApiImplicitParam(name = "userId",value = "用户id",required = true,dataType = "long",example = "1")@DeleteMapping("/delete/{userId}")public JsonResult delete(@PathVariable Long userId){return JsonResult.ok();}@ApiOperation(value = "修改用户")@ApiOperationSupport(order = 30)@ApiImplicitParams(@ApiImplicitParam(name = "userId",value = "用户id",required = true,dataType = "long",example = "1"))@PutMapping("/update/{userId}")public JsonResult update(@PathVariable Long userId, UserDTO userDTO){return JsonResult.ok();}@ApiOperation(value = "查询用户列表")@ApiOperationSupport(order = 40)@GetMapping("/list")public JsonResult list(){List<UserVO> list = new ArrayList<>();UserVO userVO = new UserVO();userVO.setUsername("root");userVO.setPassword("root");list.add(userVO);return JsonResult.ok(list);}
}

启动项目,效果:

1. 增加用户


2. 删除用户



3. 修改用户


4. 查询用户列表

五、其它

1. 生成本地API文件

在线API文档导出到本地

2. 全局参数设置

通过全局参数设置可以, 可以设置cookie等, 调试发送请求时, 会携带此请求头


SpringBoot整合Knife4j框架相关推荐

  1. SpringBoot整合knife4j

    SpringBoot整合knife4j 导入依赖 <!-- 在需要的项目中导入依赖 --> <dependencies><dependency><groupI ...

  2. SpringBoot整合CXF框架开发

    在开发过程中遇到了一些使用webservice开发的需求,后查阅资料学习,可上手开发.在学习过程中实现了个小demo,为了养成良好的总结习惯(我还没这"坏习惯"),特意写了个小呆萌 ...

  3. SpringBoot整合knife4j ,神仙朋友介绍的

    SpringBoot 整合 knife4j " knife4j 官方文档地址 https://doc.xiaominfo.com/knife4j/ " 之前经常使用 swagger ...

  4. SpringBoot整合Web框架

    SpringBoot整合Web框架 Spring Boot可以轻松创建独立的.基于Spring的生产级应用程序 它可以让你"运行即可". 大多数Spring Boot应用程序只需要 ...

  5. 详解SpringBoot整合Mybatis框架

    文章目录 前言 一.创建SpringBoot项目 二.配置Mybatis 1. 在pom.xml文件中添加jar包依赖 2. SpringBoot整合Mybatis配置文件 三.创建Mapper接口 ...

  6. 2023新版图文详解SpringBoot整合SSM框架(附源码)

    版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 教程概述 本教程以图文形式详细讲解SpringBoot整合SSM框架的流程以及具体步骤及其注意 ...

  7. idea中springboot整合Axis2框架一

    idea中springboot整合Axis2框架一 1.Axis2框架所需要的maven坐标: 2.编写webservice服务类 3.在WEB-INF/services/webService/MET ...

  8. SpringBoot整合Knife4j问题

    1. 前言 最近工作中需要到Knife4j, 加上自己的项目充电鸭上本来好的Knife4j文档突然不好使了,遇到的问题正好记录一下 2.个人网站遇到的问题 个人网站本来的事还挺好用的,经过我得一阵折腾 ...

  9. SpringBoot 整合 knife4j

    文章目录 简述 2. 导入依赖 3. 创建配置类 4. 创建User实体类 5. 创建开发接口 6. 启动项目 简述 Swagger是一款测试文档Api接口,具体用法见SpringBoot整合Swag ...

最新文章

  1. C#开发微信门户及应用(8)-微信门户应用管理系统功能介绍
  2. java不同垃圾回收器_细述 Java垃圾回收机制→Types of Java Garbage Collectors
  3. HDU - 6756 Finding a MEX-分块思想
  4. java隐藏密钥_java – 在Android中隐藏密钥库密码的最佳方法是什么?
  5. 小区重选优先级_NR小区重选理论研究
  6. Java高并发编程之第一阶段,多线程基础深入浅出
  7. OkHttp3 源码解读
  8. c语言ntc程序,NTC热敏电阻程序.doc
  9. win10安装PHP环境
  10. unturend服务器修改背包,未转变者如何修改背包容量 | 手游网游页游攻略大全
  11. python中item是什么意思中文-python中的item
  12. python3 简单爬虫实战|使用selenium来模拟浏览器抓取选股宝网站信息里面的股票
  13. 优秀的UI设计师应该了解的图标设计规范!
  14. 自制android摇一摇闹钟,摇一摇闹钟
  15. JavaC++题解与拓展——leetcode728.自除数【跳出多层循环,vector at】
  16. 分布式环境下对部分热数据(如redis热key,热请求)进行探测,并对探测结果及时同步到各个client实例的JVM内存的方案简述
  17. 如何在组装或维修计算机时避免静电,组装电脑怎么避免手上的静电
  18. 网站加入滚动字幕或公告说明
  19. debian 查看实时网速
  20. 【张朝阳的物理课笔记】8. 黑体辐射,瑞丽金斯公式的推导(上)

热门文章

  1. Python3 网易有道词典结合PyInstaller,tkinter制作一个简单的中英文翻译exe文件
  2. 【TCP/IP】TCP/IP 四层分别有哪些协议|OSI四层/五层/七层协议
  3. \t\tlinux学习之安装ttylinux(世界最小的linux操作系统)(转载)
  4. CreateFont()
  5. 使用stunnel加密nfs
  6. 【Qt编程】基于Qt的词典开发系列一--词典框架设计及成品展示
  7. Python脚本,猜数字大小游戏
  8. 进来学习,这个拿墨刀产品素材设计大赛万元大奖的原型设计超强
  9. 重新铺铜后禁布区失效铜皮不自动避让
  10. Python基础学习大纲(20天速成)-第四篇