1、前言

①在前后端分离开发中,一般需要构建一份API文档来描述所有接口信息,文档工作量巨大,需要包含接口地址、请求参数以及返回值等,且维护不方便,一旦接口发生变化就需要修改文档。

②Swagger的出现可以帮助开发人员快速设计、构建、记录、使用RESTFul API/Web服务。它将代码和文档融为一体,完美解决上述问题,将开发人员的精力集中到业务中,而不是繁琐的文档。

③网上很多Swagger教程均基于Swagger2,现均已过时,而本文将带来全新Swagger3.0教程,以最简单的方式实现Swagger3(OAS3)快速配置上手,实现API接口文档自动化。

2、开发工具及版本

JAVA11或者JAVA13

Spring-boot 2.5+

3、Swagger3.0与Swagger2的主要差异:

①Swagger3通过@EnableOpenApi注解开启应用,而Swagger2通过@EnableSwagger2注解开启应用。

②依赖有所不同,见下文。

③访问网址不同,Swagger3是http://localhost:8080/swagger-ui/index.html,Swagger2是http://localhost:8080/swagger-ui.html,这个要特别注意。

4、项目整合使用Swagger3.0配置完整过程

1、创建Spring-boot Web项目,添加Swagger3.0相关依赖,代码如下:

        <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version></dependency>

原Swagger2需要引入下面两个依赖,这里我们了解即可。

        <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>3.0.0</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>3.0.0</version></dependency>

2、接下来创建Swagger3.0配置类Swagger3Config,项目结构树和代码如下:

这里我们特别注意:

①apis(RequestHandlerSelectors.basePackage("com.example.demohelloworld.swagger3.controller")),表明扫描该包下面所有的Controller接口类。

②apis(RequestHandlerSelectors.any())表明扫描所有满足条件的Controller接口类。

③paths(Predicate.not(PathSelectors.regex("/error.*")))表明排除某个路径,在RESTFul接口中有时候需要排除"/error.*"等接口,只需要加入上述代码即可,regex()表明符合正则的路径。

④还有一个地方很容易被忽略,Swagger3的访问网址swagger-ui/index.html是放在META-INF/resources下面,所以我们需要加入资源映射,确保能够访问。映射的地址是/META-INF/resources/webjars/springfox-swagger-ui/。

package com.example.demohelloworld.swagger3.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
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.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;import java.util.function.Predicate;@Configuration
//@EnableOpenApi开启SWAGGER3.0
@EnableOpenApi
public class Swagger3Config implements WebMvcConfigurer {@Bean//同Swagger2相似,主要是配置一个DocketDocket docket(){//DocumentationType.OAS_30,原Swagger2选择DocumentationType.SWAGGER_2return new Docket(DocumentationType.OAS_30).select()//通过apis方法配置要扫描的controller的位置.apis(RequestHandlerSelectors.basePackage("com.example.demohelloworld.swagger3.controller"))//通过paths方法配置路径.paths(PathSelectors.any())//设置需要排除的路径(如果需要).paths(Predicate.not(PathSelectors.regex("/error.*"))).build().apiInfo(new ApiInfoBuilder()//设置文档标题.description("Swagger3测试API接口文档")//设置联系人信息.contact(new Contact("API作者","https://www.csdn.net","lulc@163.com"))//设置版本号.version("1.1")//设置文档抬头.title("API测试文档")//设置授权.license("License By lulu")//设置授权访问网址.licenseUrl("https://swagger.io").build());}@Override//swagger-ui/index.html在META-INF/resources下面,添加资源映射确保URL能够访问public void addResourceHandlers(ResourceHandlerRegistry registry){registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/").resourceChain(false);}}

3、Swagger3Config配置完成后,我们创建一个测试接口ApiController就可以开始测试了。

首先我们了解Swagger3一些常用注解的含义:

@Api:用在类上,用来描述整个Controller接口信息。

@ApiOperation:用在方法上,用来描述方法的基本信息,value是对方法作用的简短描述,notes则是该方法的详细描述。

@ApiImplicitParam:用在方法上,用来描述方法的参数,paramType是指方法参数类型,可选值有path(参数获取方式@PathVariable)、query(参数获取方式@RequestParam)、header(参数获取方式@RequestHeader)、body(参数获取方式@RequestBody)以及form,name表示参数名字,和参数名字对应,value则是参数描述信息。required表示该字段是否必填,defaultValue表示该字段的默认值,注意,这里的required和defaultValue不具备真正的约束性仅为文档显示,真正的还需要在@RequestParam中设置。

@ApiImplicitParams:如果是多参数,可将多个参数放在@ApiImplicitParams中,格式为@ApiImplicitParams({@ApiImplicitParam(paramType="query",name="username"),@ApiImplicitParam(paramType="path",name="userid")})。

@ApiResponse:对响应结果的描述,code表示响应码,@message表示描述信息,如果有多个@ApiResponse,可以放在一个@ApiResponses中。

@ApiResponses:格式为@ApiResponses({@ApiResponse(code = 200,message = "删除成功!"),@ApiResponse(code = 500,message = "删除失败!")})。

@ApiModel:一般用于响应类上,表示一个返回响应数据的信息(如updateUse方法,请求参数无法使用@ApiImplicitParam注解进行描述的时候)。

@ApiModelProperty:用在属性上,描述响应类的属性。

@ApiIgnore:表述不对某个接口生成文档,即忽略这个接口。

接下来我们在Controller层创建测试接口ApiController,将以上注解写入相应的位置。在RESTFul API接口中,书写注解的位置可以是@Repository,也可以是@Service。

Controller调用Service,Service调用Dao(Repository),是常见的MVC三层模型。而Swagger灵活的地方就是可以在这三层中需要的位置任意书写。

package com.example.demohelloworld.swagger3.controller;import io.swagger.annotations.*;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;@RestController
//@Api:用在类上,用来描述整个Controller接口信息。
@Api(tags = "用户数据接口")
public class ApiController {//@ApiOperation:用在方法上,用来描述方法的基本信息@ApiOperation(value = "查询用户" ,notes = "根据ID查询用户")//@ApiImplicitParam:用在方法上,用来描述方法的参数@ApiImplicitParam(paramType = "path",name = "id",value = "用户id",required = true,dataType = "String",dataTypeClass = String.class)@GetMapping("/user/{id}")public String getUserByID(@PathVariable Integer id){return "userid:"+ id;}//@ApiResponse:对响应结果的描述@ApiResponses({@ApiResponse(code = 200,message = "删除成功!"),@ApiResponse(code = 500,message = "删除失败!")})@ApiOperation(value = "删除用户", notes = "删除用户BYid")@DeleteMapping("/user/{id}")public String deleteUserById(@PathVariable Integer id){return "删除用户:"+id;}@ApiOperation(value = "添加用户",notes = "添加一个用户,传入用户名和地址")//@ApiImplicitParams:如果是多参数,可将多个参数@ApiImplicitParam放在@ApiImplicitParams中@ApiImplicitParams({@ApiImplicitParam(paramType = "query",name = "username",value = "传入用户名",required = true,defaultValue = "lulu",dataType = "String",dataTypeClass = String.class),@ApiImplicitParam(paramType = "query",name = "address",value = "传入地址",required = true,defaultValue = "深圳",dataType = "String",dataTypeClass = String.class)})@PostMapping("/user")public String addUser(@RequestParam String username,@RequestParam String address){return "添加用户:"+username+" 地址:"+address;}@ApiOperation(value = "修改用户",notes = "修改用户,传入用户信息")@PutMapping("/user")public String updateUser(@RequestBody Users user){return "修改用户"+user.getUsername()+user.getAddress();}//@ApiIgnore:表述不对某个接口生成文档@GetMapping("/ignore")@ApiIgnorepublic void ignore(){}//@ApiModel:一般用于响应类上,表示一个返回响应数据的信息@ApiModel(value = "用户实体类",description = "用户信息描述")public static class Users{//@ApiModelProperty:用在属性上,描述响应类的属性@ApiModelProperty(value = "用户名")private String username;@ApiModelProperty(value = "用户地址")private String address;public String getUsername() {return username;}public String getAddress() {return address;}public void setUsername(String username) {this.username = username;}public void setAddress(String address) {this.address = address;}}
}

4、启动项目,输入http://localhost:8080/swagger-ui/index.html开始测试,效果图如下

接下来就可以在Swagger中开启各项API接口测试了,调试也就变得非常简单。(可以暂时告别Postman等第三方接口测试工具了)

5、补充一点,如果系统设置的有拦截,还需要排除一下Swagger3.0的相关资源,我们排除以下四种资源即可。

.excludePathPatterns("/swagger**/**")
.excludePathPatterns("/webjars/**")
.excludePathPatterns("/v3/**")
.excludePathPatterns("/doc.html");

5、总结

全新Swagger3.0的易用性还是非常不错的,依赖相比2.0减少一个,配置更加简单,新版的页面风格更加现代化,有耳目一新的感觉。

后续我还将更新如何利用Spring Jpa/Mysql/Swagger3快速搭建一个生产级RESTFul API接口,欢迎关注、留言、转发。

全新Swagger3.0教程,OAS3快速配置指南,实现API接口文档自动化!相关推荐

  1. 项目配置Swagger2生成API接口文档

    一.Swagger2介绍 前后端分离开发模式中,api文档是最好的沟通方式. Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务. 及时性 (接 ...

  2. 我的《ANSA快速入门指南》中文帮助文档浅析(上)

    作者 | 团长 仿真秀科普作者 导读:本文是ANSA入门系列第一篇(后续将会在仿真秀官网或APP同步发布).本系列致力于提供ANSA软件的中文版,帮助广大初学者迅速入门.本文档内容及图片均来自于ANS ...

  3. python生成api文档_Django 自动生成api接口文档教程

    最近在写测试平台,需要实现一个节点服务器的api,正好在用django,准备使用djangorestframework插件实现. 需求 实现一个接口,在调用时,通过传递的参数,直接运行对应项目的自动化 ...

  4. python api接口生成_Django 自动生成api接口文档教程

    最近在写测试平台,需要实现一个节点服务器的api,正好在用django,准备使用djangorestframework插件实现. 需求 实现一个接口,在调用时,通过传递的参数,直接运行对应项目的自动化 ...

  5. Swagger3 API接口文档规范课程(Java1234)(内含教学视频+源代码)

    Swagger3 API接口文档规范课程(Java1234)(内含教学视频+源代码) 教学视频+源代码下载链接地址:https://download.csdn.net/download/weixin_ ...

  6. 如何自动生成 API 接口文档 - 一份详细指南

    本篇文章详细教你如何使用 Apifox 的 IDEA 插件实现自动生成接口代码.好处简单总结有以下几点: 自动生成接口文档: 不用手写,一键点击就可以自动生成文档,当有更新时,点击一下就可以自动同步接 ...

  7. 开发日记-20190328 关键词 利用eolinker一键快速生成API接口文档

    今天感觉效率真的很低= =各个层面的,apk发布到现场发现出现了问题,所以一个下午都在忙着解决现场出现的问题,领导一直打电话询问进度,午觉也没有睡所以今天预计的很多计划都处于停滞状态,像昨天规划的今天 ...

  8. 智表ZCELL产品V1.4.0开发API接口文档 与 产品功能清单

    为了方便大家使用ZCELL,应网友要求,整理编写了相关文档,现与产品一起同步发布,供大家下载使用,使用过程中如有疑问,请与我QQ联系. 智表(ZCELL)V1.4.0版本  功能清单文档下载地址: 功 ...

  9. 利用eoLinker快速录入Api接口文档信息

    传统的接口信息录入过程太过繁琐,而最近在线接口文档编写的平台变得越来越多,我参考了知乎上推荐的几款接口平台,eoLinker是用过几天之后觉得还不错的,特此记录一下如何通过它来实现快速录入Api接口文 ...

  10. SpringBoot 配置 generator代码生成+knife4j接口文档(2种模板设置、逻辑删除、字段填充 含代码粘贴可用)保姆级教程(注意事项+建表SQL+代码生成类封装+测试类)

    保姆级教程,逻辑删除及字段自动填充设置,特别要说明的是本次用的是MySQL数据库,如果使用Oracle数据库是,数据库配置需要改变,数据库表一定要大写,否则无法生成代码. 数据库表 CREATE TA ...

最新文章

  1. 软键盘挡住WebView中输入框解决方法
  2. 编写字符串比较函数strcmp .
  3. 新浪微博和SAP CRM Interaction Center(呼叫中心)的集成
  4. Equipment download - post processing
  5. 《背影》——朱自清(目录导航测试)
  6. Loj#6485. LJJ 学二项式定理
  7. 用Python标准库turtle画一头金牛,祝您新年牛气冲天!
  8. printf(“%f“,a/b)
  9. AJPFX关于JDK,JRE,JVM的区别与联系
  10. mongodb副本集php,MongoDB副本集
  11. 2022数字化智慧工地助力建筑施工企业数字化转型
  12. 走进晶圆厂,深入了解芯片制造流程
  13. 怎么用u盘安装服务器系统,怎么安装原版Windows server 2008?U盘安装很省心
  14. R语言使用diag函数生成一个N行N列的单位矩阵
  15. 【Python工具】Python版本的天眼查,是不是就很nice啦 | 附带源码
  16. Chrome插件安装的3种方法,解决拖放不能安装的情况,并提供插件下载
  17. 北纬三十度“神命谷”旅游策划方案
  18. c++——dynamic_cast的使用
  19. 传智播客微金所项目实战移动web开发
  20. android:layout_alignParentLeft=true一下是什么意思

热门文章

  1. UVA-12304 Race(递推)
  2. 域名转发修改dns服务器,域名注册修改DNS服务器
  3. 小马哥-----高仿红米note3 市场已出现山寨 警惕 高仿红米note3 J7218刷机外观图与开机识别图
  4. uefi启动适合什么计算机,如何判断自己的电脑是否支持uefi启动模式?
  5. 门户通专访蓝色理想曾沐阳:用户需慢慢沉淀
  6. 超级账本 —— 面向企业的分布式账本
  7. 基于Amos路径分析的模型修正与调整
  8. 分门别类输入输出,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang基本数据类型和输入输出EP03
  9. Python.习题八 文件与与异常(上)
  10. 信息搜集-读取微信聊天记录