Swagger以及knife4j基本使用

Swagger 介绍:

官网:https://swagger.io/

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的 Web 服务

Restful 面向资源

RESTful是一种架构的规范与约束、原则,符合这种规范的架构就是RESTful架构

Rest是web服务的一种架构风格;使用HTTP,URI,XML,JSON,HTML等广泛流行的标准和协议;轻量级,跨平台,跨语言的架构设计,它是一种设计风格,不是一种标准,是一种思想。

说明:

http方法 资源操作 幂等 安全
GET SELECT
POST INSERT
PUT UPDATE
DELETE DELETE

幂等性:对同一REST接口多次访问,得到的资源状态是相同的

安全性:对该REST接口访问,不会使服务端资源状态发生改变

优点:

  • 透明性 --暴露资源存在(资源操作通过http本身语义进行描述,不用单独描述)

  • 充分利用HTTP协议本身语义

  • 无状态 --在调用一个接口时可以不用考虑上下文,不用考虑当前状态降低了复杂度

  • HTTP本身提供了丰富的内容协商手段(缓存,资源修改的乐观并发控制等可以通过与业务无关的中间件实现)

SpringBoot使用swagger

  1. 导入依赖
  • 2版本
<!--swagger依赖-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!--swagger ui-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
  • 3.0版本
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
  1. 编写swagger配置文件
@Configuration
@EnableSwagger2 //开启Swagger2
public class Swagger2Config {
/**
* 创建API应用
* apiInfo() 增加API相关信息
* 通过select()函数返回一个ApiSelectorBuilder实例,用来控制哪些接口暴露给Swagger来展现,
* 指定扫描的包路径来定义指定要建立API的目录。
* @return
*/
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(adminApiInfo())
//.enable(false) //enable是否启动Swagger 如果为false,则swagger不能在浏览器中访问
.groupName("adminApi")
.select()
//RequestHandlerSelectors 配置要扫描接口的方式
//basePackage: 指定要扫描的包
//any():扫描全部
//none()不扫描
//withClassAnnotation: 扫描类上的注解,参数为一个注解的反射对象
//withMethodeAnnotation: 扫描方法上的注解
.apis(RequestHandlerSelectors.basePackage("com.example.swagger.controller"))
//只显示admin下面的路径
.paths(Predicates.and(PathSelectors.regex("/admin/.*")))
.build();
} private ApiInfo adminApiInfo(){
return new ApiInfoBuilder()
.title("api文档")
.description("系统接口描述")
.version("1.0")
//作者信息
.contact(new Contact("张三","http://baidu.com","12345678@qq.com"))
.build();
}
}
  1. 编写接口请求并运行

访问方式(本地):http://localhost:8080/swagger-ui.html

使用:

  • 实体类:

    • @ApiModel("用户实体类")
      public class User{ @ApiModelProperty("用户名")
      public String username;
      }
  • 接口方法,参数:

    • @RestController
      public class UserController{ @ApiOperation("User控制类")
      @GetMapping(value="/user")
      public String getUser(@ApiParam("用户名")String username){
      return "名字为:"+username;
      }
      }

常用注解:

@Api:修饰整个类,描述Controller的作用,放在类上

@ApiOperation:描述一个类的一个方法,或者说一个接口

@ApiParam:单个参数描述

@ApiModel:用对象来接收参数

@ApiProperty:用对象接收参数时,描述对象的一个字段

@ApiResponses:HTTP响应整体描述

@ApiResponse:HTTP响应其中1个描述

@ApiIgnore:使用该注解忽略这个API

@ApiError :发生错误返回的信息

@ApiImplicitParams:描述由多个 @ApiImplicitParam 注解的参数组成的请求参数列表

@ApiImplicitParam:描述一个请求参数,可以配置参数的中文含义,还可以给参数设置默认值
//eg:
@ApiImplicitParam(name="username",value="用户名",required=true)

Knife4j --Swagger增强工具

使用Knife4j2.06以上版本,springboot版本必须大于等于2.2.x

作用

  • 可以搜索接口名称快速定位接口(搜索功能)

  • 可以下载markdown、HTML、word 等格式文件(下载功能)

  1. 引入依赖
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>2.0.9</version>
</dependency>
  1. 添加SwaggerConfiguration作为Swagger2的配置类
@Configuration
@EnableSwagger2
@EnableKnife4j
//@EnableSwagger2WebMvc 2.6以上报空指针异常则需要添加
@Import(BeanValidatorPluginsConfiguration.class)
public class SwaggerConfiguration {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2) // 选择swagger2版本
.apiInfo(apiInfo()) //定义api文档汇总信息
.select()
.apis(RequestHandlerSelectors
.basePackage("com.example")) // 指定生成api文档的包
.paths(PathSelectors.any()) // 指定所有路径
.build();
} /**
* 构建文档api信息
*
* @return
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("") // 文档标题
.contact(new Contact("", "", "")) //联系人信息
.description("") //描述
.version("1.0.1") //文档版本号
.termsOfServiceUrl("") //网站地址
.build();
}
}
  1. 实现生产环境关闭文档资源
spring:
profiles: prod #指定环境
knife4j:
production: true #开启屏蔽文档资源
  1. 实现接口排序
  • 针对不同Controller排序:Controller上标注@ApiSupport(order = 序号)
  • 针对同一个Controller中的不同方法排序:同一个Controller不同接口方法上标注@ApiOperationSupport(order = 序号)

注:更多详细配置可查看CSDN博主:swagger文档增强工具knife4j使用详解_baobao555#的博客-CSDN博客_knife4j swagger

Swagger以及knife4j的基本使用的更多相关文章

  1. 魔改swagger:knife4j的另外一种打开方式

    之前公司使用了swagger作为文档管理工具,原生的swagger-ui非常丑,之后就用了开源项目 萧明 / knife4j 的swagger组件进行了swagger渲染,改造之后界面漂亮多了,操作也 ...

  2. Springboot集成swagger和knife

    前言 knife4j是在swagger的基本上做做了一次封装,主要体现在ui表现,所有在使用前必须先搭建好swagger2,其实是swagger和knife都可以访问, 至于哪个好用全看个人! swa ...

  3. springboot集成swagger实战(基础版)

    1. 前言说明 本文主要介绍springboot整合swagger的全过程,从开始的swagger到Knife4j的进阶之路:Knife4j是swagger-bootstarp-ui的升级版,包括一些 ...

  4. 3、集成springfox-swagger 3.0.0 + 集成knife4j

    集成springfox-swagger 3.0.0 + 集成knife4j 1.基本用法 1.1.导入依赖 <!-- web接口 --> <dependency> <gr ...

  5. 给Swagger换一套皮肤 Knife4j集成记录

    Swagger有一套经典的UI,但是并不是很好用,之前有看到Knife4j,界面没管.功能完善,因此尝试集成. demo参考示例地址:knife4j-spring-boot-demo Knife4j前 ...

  6. SpringBoot整合knife4j

    官网说明及用法: 简介 swagger-bootstrap-ui是springfox-swagger的增强UI实现,为Java开发者在使用Swagger的时候,能拥有一份简洁.强大的接口文档体验 核心 ...

  7. springboot之swagger快速启动(新的ui)

    springboot之swagger快速启动(新的ui) 功能点: 集成swagger前端接口文档 Swagger 整合 zuul 智能列表 无缝集成 knife4j 前端文档 支持 v0.1.2RE ...

  8. 给你的Swagger文档换套附魔皮肤吧

    前言 相信无论是前端或是后端的程序员对Swagger都不怎么陌生,没有用过应该也听说过 Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务. 简 ...

  9. 求你别再用swagger了,给你推荐几个在线文档生成神器

    前言 最近公司打算做一个openapi开放平台,让我找一款好用的在线文档生成工具,具体要求如下: 必须是开源的 能够实时生成在线文档 支持全文搜索 支持在线调试功能 界面优美 说实话,这个需求看起来简 ...

随机推荐

  1. 万字剖析Ribbon核心组件以及运行原理

    大家好,本文我将继续来剖析SpringCloud中负载均衡组件Ribbon的源码.本来我是打算接着OpenFeign动态代理生成文章直接讲Feign是如何整合Ribbon的,但是文章写了一半发现,如果 ...

  2. 论文解读(MGAE)《MGAE: Masked Autoencoders for Self-Supervised Learning on Graphs》

    论文信息 论文标题:MGAE: Masked Autoencoders for Self-Supervised Learning on Graphs论文作者:Qiaoyu Tan, Ninghao L ...

  3. JVM学习笔记-从底层了解程序运行(一)

    1:JVM基础知识 什么是JVM 1. java虚拟机,跨语言的平台,实现java跨平台 2. 可以实现多种语言跨平台,只要该语言可以编译成.class文件 3. 解释执行.class文件 java是 ...

  4. SAP Using Text Modules in Adobe Forms

    In this demo we will create an adobe form which displays text in two different languages (English or ...

  5. kvm虚拟机在线扩容

    fdisk -l查看当前虚拟机磁盘容量 1. 镜像扩容 先操作镜像,给镜像增加2T容量: 关闭虚拟机back_log,然后再宿主机上给虚拟机扩容 qemu-img info /home/kvm/bac ...

  6. NC16597 [NOIP2011]聪明的质监员

    NC16597 [NOIP2011]聪明的质监员 题目 题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 \(n\) 个矿石,从 \(1\) 到 \(n\) 逐一编号,每个矿 ...

  7. 从0到1建设智能灰度数据体系:以vivo游戏中心为例

    作者: vivo 互联网数据分析团队-Dong Chenwei vivo 互联网大数据团队-Qin Cancan.Zeng Kun 本文介绍了vivo游戏中心在灰度数据分析体系上的实践经验,从&quo ...

  8. JSP页面+请求转发+EL表达式

    1) JSP全称Java Server Pages,顾名思义就是运行在java服务器中的页面,也就是在我们JavaWeb中的动态页面,其本质就是一个Servlet.2) 其本身是一个动态网页技术标准, ...

  9. HashMap存储自定义类型键值和LinkedHashMap集合

    HashMap存储自定义类型键值 1.当给HashMap中存放自定义对象时,如果自定义对象是键存在,保证键唯一,必须复写对象的hashCode和equals方法. 2.如果要保证map中存放的key和 ...

  10. 2022-07-14 第六组 润土 Java02学习笔记

    1.引用数据类型 Scanner类: Scanner shuru=new Scanner(System.in); int a=shuru.nextInt();//输入整型 String b= shur ...