SpringBoot如何优雅的整合Swagger Api自动生成文档
作者:kenx 发布时间:2022-08-10 00:49:29
目录
前言
整合swagger api
自定义配置信息
简单使用
Swagger常用注解
Api标记
ApiOperation标记
ApiParam标记
ApiModel标记
ApiModelProperty标记
ApiIgnore标记
ApiImplicitParam标记
ApiImplicitParams标记
总结
前言
一个好的可持续交付的项目,项目说明,和接口文档是必不可少的,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>
正如官网所说
kinfe4j官方文档点击这里
自定义配置信息
为我们为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(){
}
来源:https://www.cnblogs.com/kenx/p/14984816.html


猜你喜欢
- 代码如下: package swt_jface.demo9; import org.eclipse.swt.SWT; import org.
- 本文实例展示了DevExpress获取TreeList可视区域节点集合的实现方法,是比较有实用价值的技巧。分享给大家供大家参考。具体实现方法
- 一、前言在spring中,定义rabbitMq的消费者可以相当方便,只需要在消息处理类或者类方法加上@RabbitListener注解,指定
- 在Android Studio中,你可以很快速的使用Parcelable插件进行实体类的序列化的实现,使用该插件后,你的实体类可以快速的实现
- SpringBoot集成Mybatis时mybatis.mapper-locations和@MapperScan的作用1、mybatis.m
- 近年来,二维码的使用越来越风生水起,笔者最近手头也遇到了一个需要使用二维码扫码登录网站的活,所以研究了一下这一套机制,并用代码实现了整个流程
- 最近比较无聊,随便翻着博客,无意中看到了有的人用VBS读文本内容,也就是读几句中文,emmm,挺有趣的,实现也很简单,都不需要安装什么环境,
- XML的特点是功能全面,但标签繁琐,格式复杂。在Web上使用XML现在越来越少,取而代之的是JSON这种数据结构。JSON是JavaScri
- 本文实例讲述了C#中Socket通信用法。分享给大家供大家参考。具体如下:一、UDP方式:服务器端代码:static void Main(s
- 在学习C#中委托和事件时,产生一个疑问,类中定义的事件在类内部可以直接调用,而在类外部,事件却只能添加或移除委托方法比如下面这段代码,类Cu
- 背景当一个项目分了很多模块,很多个服务的时候,一些公共的配置就需要统一管理了,于是就有了元数据驱动!简介什么是Calcite?是一款开源SQ
- OO思想现在已经在软件开发项目中广泛应用,其中最重要的一个特性就是继承,最近偶简单的复习了下在C#中涉及到继承这个特性时,所需要用到的关键字
- 一、ehcahe的介绍EhCache 是一个纯Java的进程内缓存框架,具有高速、精干等特点,是Hibernate中默认的CacheProv
- 同样该功能需要加载命名空间using System.Runtime.InteropServices;private const uint W
- java连接zookeeper实现zookeeperJava服务端连接Zookeeper,进行节点信息的获取,管理…整理成一个基本工具添加依
- 前言小伙伴们知道,在 Shiro 中,默认是支持权限通配符的,例如系统用户有如下一些权限:system:user:addsystem:use
- 本文实例讲述了Android编程实现图片的浏览、缩放、拖动和自动居中效果的方法。分享给大家供大家参考,具体如下:Touch.java/**
- 传输层安全性协议(英语:Transport Layer Security,缩写作 TLS),及其前身安全套接层(Secure Sockets
- 单例模式、多实例模式、和线程安全单例模式单例模式是指确保一个类仅有一个唯一的实例,并且提供了一个全局的访问点。分类: 懒汉式、饿汉式为什么需
- 本文实例讲述了C#字符串加密解密方法。分享给大家供大家参考。具体如下:#region 加密解密static string encryptKe