SpringBoot 优雅整合Swagger Api 自动生成文档
前言
一个好的可持续交付的项目,项目说明,和接口文档是必不可少的,swagger api 就可以帮我们很容易自动生成api 文档,不需要单独额外的去写,无侵入式,方便快捷大大减少前后端的沟通方便查找和测试接口提高团队的开发效率方便新人了解项目,剩余的时间就可以去约妹子啦
![]()
整合swagger api
这里我们自己去整合swagger api比较麻烦,要导入好几个包,有大神帮我们写好了轮子kinfe4j直接对应SpringBoot的启动项,而且在不影响原来使用功能上界面ui做了美化功能做了增强 我们直接整合这个就好了
<!--api 文档-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.0.1</version>
</dependency>
正如官网所说

自定义配置信息
为我们为swagger配置更多的接口说明
package cn.soboys.core.config;
import cn.hutool.core.collection.CollUtil;
import cn.soboys.core.ret.ResultCode;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.builders.ResponseBuilder;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.Response;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
/**
* @author kenx
* @version 1.0
* @date 2021/6/21 16:02
* api 配置类
*/
@Configuration
public class SwaggerConfigure {
@Resource
private SwaggerProperty swaggerProperty;
/**
* 构造api 文档
* @return
*/
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.OAS_30).globalResponses(HttpMethod.POST, this.responseList()) //全局respons信息
.apiInfo(apiInfo(swaggerProperty)) //文档信息
.select()
//文档扫描
//.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) //有ApiOperation注解的controller都加入api文档
.apis(RequestHandlerSelectors.basePackage(swaggerProperty.getBasePackage())) //包模式
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo(SwaggerProperty swagger) {
return new ApiInfoBuilder()
//标题
.title(swagger.getTitle())
//描述
.description(swagger.getDescription())
//创建联系人信息 (作者,邮箱,网站)
.contact(new Contact(swagger.getAuthor(), swagger.getUrl(), swagger.getEmail()))
//版本
.version(swagger.getVersion())
//认证
.license(swagger.getLicense())
//认证协议
.licenseUrl(swagger.getLicenseUrl())
.build();
}
/**
* 全局response 返回信息
* @return
*/
private List<Response> responseList() {
List<Response> responseList = CollUtil.newArrayList();
Arrays.stream(ResultCode.values()).forEach(errorEnum -> {
responseList.add(
new ResponseBuilder().code(errorEnum.getCode().toString()).description(errorEnum.getMessage()).build()
);
});
return responseList;
}
}
抽出api文档配置模版信息为属性文件方便复用
package cn.soboys.core.config;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringBootConfiguration;
/**
* @author kenx
* @version 1.0
* @date 2021/6/21 16:01
* api 文档信息
*/
@Data
@SpringBootConfiguration
public class SwaggerProperty {
/**
* 需要生成api文档的 类
*/
@Value("${swagger.basePackage}")
private String basePackage;
/**
* api文档 标题
*/
@Value("${swagger.title}")
private String title;
/**
* api文档 描述
*/
@Value("${swagger.description}")
private String description;
/**
* api文档 版本
*/
@Value("${swagger.version}")
private String version;
/**
* api 文档作者
*/
@Value("${swagger.author}")
private String author;
/**
* api 文档作者网站
*/
@Value("${swagger.url}")
private String url;
/**
* api文档作者邮箱
*/
@Value("${swagger.email}")
private String email;
/**
* api 文档 认证协议
*/
@Value("${swagger.license}")
private String license;
/**
* api 文档 认证 地址
*/
@Value("${swagger.licenseUrl}")
private String licenseUrl;
}
简单使用
在你的Controller上添加swagger注解
@Slf4j
@Api(tags = "登录")
public class LoginController {
private final IUsersService userService;
@PostMapping("/login")
@ApiOperation("用户登录")
public String login(@RequestBody UserLoginParams userLoginParams) {
Users u = userService.login(userLoginParams);
return "ok";
}
}
注意如启用了访问权限,还需将swagger相关uri允许匿名访问
/swagger**/**
/webjars/**
/v3/**
/doc.html
重启服务,自带api文档访问链接为/doc.html界面如下:

相比较原来界面UI更加漂亮了,信息更完善功能更强大
Swagger常用注解

Api标记
用在请求的类上,表示对类的说明,也代表了这个类是swagger2的资源
参数:
- tags:说明该类的作用,参数是个数组,可以填多个。
- value="该参数没什么意义,在UI界面上不显示,所以不用配置"
- description = "用户基本信息操作"
ApiOperation标记
用于请求的方法上表示一个http请求的操作
参数:
- value用于方法描述
- notes用于提示内容
- tags可以重新分组(视情况而用)
ApiParam标记
用于请求方法上对请求参数,字段说明;表示对参数的添加元数据(说明或是否必填等)
参数:
- name–参数名
- value–参数说明
- required–是否必填
ApiModel标记
用于java实体类上表示对类进行说明,用于参数用实体类接收
参数:
- value–表示对象名
- description–描述
都可省略
ApiModelProperty标记
用于方法,字段; 表示对model属性的说明或者数据操作更改
参数:
- value–字段说明
- name–重写属性名字
- dataType–重写属性类型
- required–是否必填
- example–举例说明
- hidden–隐藏
@ApiModel(value="user对象",description="用户对象user")
public class User implements Serializable{
private static final long serialVersionUID = 1L;
@ApiModelProperty(value="用户名",name="username",example="xingguo")
private String username;
@ApiModelProperty(value="状态",name="state",required=true)
private Integer state;
private String password;
private String nickName;
private Integer isDeleted;
@ApiModelProperty(value="id数组",hidden=true)
private String[] ids;
private List<String> idList;
//省略get/set
}
ApiIgnore标记
用于请求类或者方法上,可以不被swagger显示在页面上
ApiImplicitParam标记
用于方法表示单独的请求参数
ApiImplicitParams标记
用于方法,包含多个 @ApiImplicitParam
参数:
- name–参数名
- value–参数说明
- dataType–数据类型
- paramType–参数类型
- example–举例说明
@ApiOperation("查询测试")
@GetMapping("select")
//@ApiImplicitParam(name="name",value="用户名",dataType="String", paramType = "query")
@ApiImplicitParams({
@ApiImplicitParam(name="name",value="用户名",dataType="string", paramType = "query",example="xingguo"),
@ApiImplicitParam(name="id",value="用户id",dataType="long", paramType = "query")})
public void select(){
}
总结
- 可以给实体类和接口添加注释信息
- 接口文档实时更新
- 在线测试
- kinfe4j 在swagger API只做增强,不会改变原有任何使用,更多增加使用功能
点击这里进入kinfe4j官网文档
关注公众号猿人生了解更多内容

SpringBoot 优雅整合Swagger Api 自动生成文档的更多相关文章
- 使用 Swagger 自动生成 ASP.NET Core Web API 的文档、在线帮助测试文档(ASP.NET Core Web API 自动生成文档)
对于开发人员来说,构建一个消费应用程序时去了解各种各样的 API 是一个巨大的挑战.在你的 Web API 项目中使用 Swagger 的 .NET Core 封装 Swashbuckle 可以帮助你 ...
- MVC WEB api 自动生成文档
最近在一直在用webapi做接口给移动端用.但是让我纠结的时候每次新加接口或者改动接口的时候,就需要重新修改文档这让我很是苦恼.无意中发现.webapi居然有自动生成文档的功能....真是看见了救星啊 ...
- SpringBoot 集成Swagger2自动生成文档和导出成静态文件
目录 1. 简介 2. 集成Swagger2 2.1 导入Swagger库 2.2 配置Swagger基本信息 2.3 使用Swagger注解 2.4 文档效果图 3. 常用注解介绍 4. Swagg ...
- 使用swagger在netcorewebapi项目中自动生成文档
一.背景 随着前后端分离模式大行其道,我们需要将后端接口撰写成文档提供给前端,前端可以查看我们的接口,并测试,提高我们的开发效率,减少无效的沟通.在此情况下,通过代码自动生成文档,这种需求应运而生,s ...
- eoLinker 新功能发布,增加了识别代码注释自动生成文档功能
产品地址:https://www.eolinker.com开源代码:https://www.eolinker.com/#/os/download在线生成代码注释工具:http://tool.eolin ...
- 使用doctest代码测试和Sphinx自动生成文档
python代码测试并自动生成文档 Tips:两大工具:doctest--单元测试.Sphinx--自动生成文档 1.doctest doctest是python自带的一个模块.doctest有两种使 ...
- 【Sphinx】 为Python自动生成文档
sphinx 前言 Sphinx是一个可以用于Python的自动文档生成工具,可以自动的把docstring转换为文档,并支持多种输出格式包括html,latex,pdf等 开始 建一个存放文档的do ...
- 使用Sphinx为你的python模块自动生成文档
Sphinx是一个可以用于Python的自动文档生成工具,可以自动的把docstring转换为文档,并支持多种输出格式包括html,latex,pdf等. 安装 创建一个sphinx项目 下面的命令会 ...
- 用doxygen自动生成文档
1. 添加符合doxygen解析规则的注释 (比如函数说明,函数参数/返回值说明) 用qt-creator可以在函数上方一行键入“/**”,然后直接回车,就可以自动生成默认的格式. 2. 安装doxy ...
随机推荐
- top命令查看CPU状态信息:%us、%sy、%ni、%id、%wa、%hi、%si、%st 表示的是什么意思
Linux CPU负载状态:%us/%sy/%ni/%id/%wa/%hi/%si/%st含义 2018-08-26 分类:Linux 评论(0) 缙哥哥发现用了雅黑的探针,在 Linux 的 C ...
- 转圈 箭头 ⟳ 10227 27F3 刷新 HTML常用的特殊符号总结
HTML常用的特殊符号总结 2014年9月12日 57621次浏览 html中经常会用到一些特殊符号,例如箭头,雪花,心形等等,这些符号就不用css样式或者图片来写了,直接用html特殊符号可以实现. ...
- 华为交换机Console口属性配置
华为交换机Console口属性配置 一.设置通过账号和密码(AAA验证)登陆Console口 进入 Console 用户界面视图 <Huawei>system-view [Huawei]u ...
- U盘PE重装系统导致D、E、F盘消失
U盘PE重装系统导致D.E.F盘消失 听语音 原创 | 浏览:1251 | 更新:2014-08-18 18:46 | 标签:u盘 重装 解决使用U盘PE重装系统导致的错误问题 工具/原料 制作好 ...
- session.flush()与session.clear()区别与使用环境
session是有一级缓存的,目的是为了减少查询数据库的时间,提高效率,生命周期与session是一样的 session.flush() 是将session的缓存中的数据与数据库同步 事物提交失败 缓 ...
- 安装T4环境
Install-Package Microsoft.VisualStudio.TextTemplating.14.0 -Version 14.3.25407
- kafka之二:手把手教你安装kafka2.8.0(绝对实用)
前面分享了kafka的基本知识,下面就要对kafka进行实操,先看如何安装. kafka需要zookepper的支持,所以要安装kafka需要有zookeeper的环境,zookeeper安装请参见& ...
- 『动善时』JMeter基础 — 36、JMeter接口关联【正则表达式提取器】
目录 1.正则表达式提取器介绍 2.正则表达式提取器界面详解 3.正则表达式提取器的使用 (1)测试计划内包含的元件 (2)请求一界面内容 (3)正则表达式提取器界面内容 (4)请求二界面内容 (5) ...
- YOLOvi(i=1,2,3,4)系列
YOLOvi(i=1,2,3,4)系列 YOLOv4论文链接:https://arxiv.org/pdf/2004.10934.pdf YOLOv4源码链接:https://github.com/Al ...
- MindSpore后端运行类
MindSpore后端运行类 Q:如何在训练过程中监控loss在最低的时候并保存训练参数? A:可以自定义一个Callback.参考ModelCheckpoint的写法,此外再增加判断loss的逻辑: ...