1.什么是Swagger?

我们在编写了大量的接口之后,如果接口的调用者不是自身的话,那么就会面临要编写接口文档的苦恼,这时候Swagger就应运而生了。

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。Swagger 让部署管理和使用功能强大的API从未如此简单。

Swagger的组件:

Swagger spec:这一块对元素的嵌套、命令等采用官方模式。如果你想要对 Swagger 文件手动编码,你必须非常熟悉 Swagger spec。 Swagger editor:这是在线编辑器,用于验证你的 YML 格式的内容是否违反 Swagger spec 。YML 是一种句法,依赖于空格和嵌套。你需要对 YML 句法很熟悉才能很好的遵守 Swagger spec 规范。Swagger 编辑器会标出错误并且给你格式提醒(Swagger spec 文件可以使用 JSON 或者 YAML 中的任意一种格式)。 Swagger-UI:这是一套 HTML/CSS/JS 框架用于解析遵守 Swagger spec 的 JSON 或 YML 文件,并且生成API文档的UI导航。它可以将你的规格文档转换成Swagger Petsotre-like UI。 Swagger-codegen: 这个工具可以为不同的平台生成客户端 SDK(比如 Java、JavaScript、Python 等)。这些客户端代码帮助开发者在一个规范平台中整合 API ,并且提供了更多健壮的实现,可能包含了多尺度、线程,和其他重要的代码。SDK 是用于支持开发者使用 REST API 的工具。 Swagger-validator:这个小工具是用来校验生成的文档说明文件是否符合语法规定的。用法非常简单,只需url地址栏,根路径下加上一个参数url,参数内容是放swagger说明文件的地址,即可校验。

2.版本介绍

(1)Spring Boot 版本:2.7.2

(2)Swagger版本:springfox-boot-starter : 3.0.0

(3)JDK:1.8

3.Springboot整合Swagger实例:

springfox-boot-starter 该starter包含了一些swagger必要的自动配置类和启动器,其主要包括:

springfox-swagger:swagger核心,生成接口文档的Json格式数据springfox-swagger-ui:swagger可视化,将Json数据可视化展示

maven配置:

io.springfox

springfox-boot-starter

3.0.0

yml配置 :

spring:

mvc:

pathmatch:

matching-strategy: ant_path_matcher

swagger配置类:

package com.springboot.test.config.swagger;

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.oas.annotations.EnableOpenApi;

import springfox.documentation.service.ApiInfo;

import springfox.documentation.service.Contact;

import springfox.documentation.spi.DocumentationType;

import springfox.documentation.spring.web.plugins.Docket;

/**

* @author cf

* @date 2022/12/3 18:56

* @description swagger配置类

*/

@Configuration

@EnableOpenApi //开启swagger支持

public class SwaggerConfig {

/**

* Docket类是Swagger的配置类,要自定义修改 Swagger 的默认配置信息,我们需要覆盖该对象

* @return

*/

@Bean

public Docket docket(){

//1.以OAS_30标准构建Docket配置类

return new Docket(DocumentationType.OAS_30)

//2.配置Swagger接口文档基本信息apiInfo

.apiInfo(apiInfo())

//3.select方法开启配置扫描接口的Builder

.select()

//4.指定要扫描/维护接口文档的包(否则就全部扫描)

.apis(RequestHandlerSelectors.basePackage("com.springboot.test.controller"))

//5.路径过滤:该Docket-UI展示时,只展示指定路径下的接口文档(any表示都展示)

.paths(PathSelectors.any())

.build();

}

/**

* 配置 Swagger 接口文档的基本信息

* @return

*/

private ApiInfo apiInfo(){

return new ApiInfoBuilder()

//1.接口文档标题

.title("SpringBoot整合Swagger")

//2.接口文档描述内容

.description("这里是SpringBoot整合Swagger的详细信息")

//3.项目文档迭代版本

.version("9.0")

//4.主要联系人信息(姓名name,个人主页url,邮箱email)

.contact(new Contact("cf","www.1111.com","1111111@qq.com"))

//5.相关许可证信息

.license("The CSDN License")

//6.相关许可证链接

.licenseUrl("www.baidu.com")

//7.返回构建的ApiInfo对象

.build();

}

}

controller进行测试

@GetMapping("mybatisPlus/getUser")

@ApiOperation(value="Mybatis查询", notes="Mybatis查询")

public String getMybatisPlusUser() {

TSystemUserMQEntity userEntity = systemUserService.getUserInfo();

return JSON.toJSONString(userEntity);

}

@GetMapping("jpa/getUser")

@ApiOperation(value="JPA查询(已注释)", notes="JPA查询(已注释)")

public String getJpaUser() {

UserEntity userEntity = userService.getUserInfo();

return JSON.toJSONString(userEntity);

}

启动

直接访问:http://localhost:8081/swagger-ui/index.html#/ 出来啦 ~~~ 出来啦~~~

4.Swagger Api概述

文章只这里使用到了Swagger提供的注解@ApiOperation,常用的注解还有:

(1)@Api:用在类上,说明该类的作用

(2)@ApiOperation:用在方法上,说明方法的作用,标注在具体请求上,value和notes的作用差不多,都是对请求进行说明;tags则是对请求进行分类的,比如你有好几个controller,分别属于不同的功能模块,那这里我们就可以使用tags来区分了。

(3)@ApiImplicitParams:用在方法上包含一组参数说明

(4)@ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面。

(5)@ApiResponses:用于表示一组响应

(6)@ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息

(7)@ApiModel:描述一个Model的信息(这种一般用在post创建的时候,使用@RequestBody这样的场景,请求参数无法使用@ApiImplicitParam注解进行描述的时候)表明这是一个被swagger框架管理的model,用于class上

(8)@ApiModelProperty: 这里顾名思义,描述一个model的属性,就是标注在被标注了@ApiModel的class的属性上,这里的value是对字段的描述,example是取值例子,注意这里的example很有用,对于前后端开发工程师理解文档起到了关键的作用,因为会在api文档页面上显示出这些取值来;

精彩内容

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: