当前位置:网站首页>Swagger-UI介绍及常用注解说明
Swagger-UI介绍及常用注解说明
2022-07-22 09:27:00 【墨鸦_Cormorant】
Swagger-UI
什么是swagger呢?swagger是对Open-API的一种实现。那么,什么是OpenAPI呢?
1.什么是OpenAPI
随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染、前后端分离的形态,而且前端技术和后端技术在各自的道路上越走越远。 前端和后端的唯一联系,变成了API接口;API文档变成了前后端开发人员联系的纽带,变得越来越重要。
没有API文档工具之前,大家都是手写API文档的,在什么地方书写的都有,而且API文档没有统一规范和格式,每个公司都不一样。这无疑给开发带来了灾难。
OpenAPI规范(OpenAPI Specification 简称OAS)是Linux基金会的一个项目,试图通过定义一种用来描述API格式或API定义的语言,来规范RESTful服务开发过程。目前V3.0版本的OpenAPI规范已经发布并开源在github上 。
官网:https://github.com/OAI/OpenAPI-Specification
2.什么是swagger?
OpenAPI是一个编写API文档的规范,然而如果手动去编写OpenAPI规范的文档,是非常麻烦的。而Swagger就是一个实现了OpenAPI规范的工具集。
官网:https://swagger.io/
看官方的说明:
Swagger包含的工具集:
- Swagger编辑器: Swagger Editor允许您在浏览器中编辑YAML中的OpenAPI规范并实时预览文档。
- Swagger UI: Swagger UI是HTML,Javascript和CSS资产的集合,可以从符合OAS标准的API动态生成漂亮的文档。
- **Swagger Codegen:**允许根据OpenAPI规范自动生成API客户端库(SDK生成),服务器存根和文档。
- **Swagger Parser:**用于解析来自Java的OpenAPI定义的独立库
- **Swagger Core:**与Java相关的库,用于创建,使用和使用OpenAPI定义
- Swagger Inspector(免费): API测试工具,可让您验证您的API并从现有API生成OpenAPI定义
- SwaggerHub(免费和商业): API设计和文档,为使用OpenAPI的团队构建。
3.快速入门
SpringBoot已经集成了Swagger,使用简单注解即可生成swagger的API文档。
3.1.引入依赖
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.8.0</version>
</dependency>
3.2.编写配置
package com.leyou.user.config;
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.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.host("localhost:8085")//可不要
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("controller包路径"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("乐优商城用户中心")//微服务名称
.description("乐优商城用户中心接口文档")
.version("1.0")
.build();
}
}
3.3.启动测试
重启服务,访问:http://localhost:8085/swagger-ui.html
就能看到swagger-ui为我们提供的API页面了:
可以看到我们编写的4个接口,任意点击一个,即可看到接口的详细信息:
可以看到详细的接口声明,包括:
- 请求方式:
- 请求路径
- 请求参数
- 响应等信息
点击右上角的try it out!
还可以测试接口:
填写参数信息,点击execute,可以发起请求并测试:
4.自定义接口说明
刚才的文档说明中,是swagge-ui根据接口自动生成,不够详细。如果有需要,可以通过注解自定义接口声明。常用的注解包括:
/** @Api:修饰整个类,描述Controller的作用 @ApiOperation:描述一个类的一个方法,或者说一个接口 @ApiParam:单个参数描述 @ApiModel:用对象来接收参数 @ApiProperty:用对象接收参数时,描述对象的一个字段 @ApiResponse:HTTP响应其中1个描述 @ApiResponses:HTTP响应整体描述 @ApiIgnore:使用该注解忽略这个API @ApiError :发生错误返回的信息 @ApiImplicitParam:一个请求参数 @ApiImplicitParams:多个请求参数 */
示例:
/** * 用户名和手机号唯一性校验功能 */
@GetMapping("/check/{data}/{type}")
@ApiOperation(value = "校验用户名、手机号数据是否可用,如果不存在则可用")
@ApiResponses({
@ApiResponse(code = 200, message = "校验结果有效,true或false代表可用或不可用"),
@ApiResponse(code = 400, message = "请求参数有误,比如type不是指定值")
})
public ResponseEntity<Boolean> checkUser(
@ApiParam(value = "要校验的数据", example = "lisi") @PathVariable("data") String data,
@ApiParam(value = "数据类型,1:用户名,2:手机号", example = "1") @PathVariable(value = "type") Integer type) {
return ResponseEntity.ok(userService.checkUser(data, type));
}
查看文档:
4.1.Swagger2常用注解说明
[email protected]
用在请求的类上,表示对类的说明
常用参数:
value="描述类的作用"
其他参数:
tags="说明该类的作用,非空时将覆盖value的值,可以在UI界面上看到的注解"
description 对api资源的描述,在1.5版本后不再支持
basePath 基本路径可以不配置,在1.5版本后不再支持
position 如果配置多个Api 想改变显示的顺序位置,在1.5版本后不再支持
produces 设置MIME类型列表(output),例:"application/json, application/xml",默认为空
consumes 设置MIME类型列表(input),例:"application/json, application/xml",默认为空
protocols 设置特定协议,例:http, https, ws, wss。
authorizations 获取授权列表(安全声明),如果未设置,则返回一个空的授权值。
hidden 默认为false, 配置为true 将在文档中隐藏
示例:
@Api(tags="登录请求")
@Controller
@RequestMapping(value="/highPregnant")
public class LoginController {
}
4.1.2.@ApiOperation
用在请求的方法上,说明方法的用途、作用
常用参数:
value="说明方法的用途、作用"
notes="方法的备注说明"
其他参数:
tags 操作标签,非空时将覆盖value的值
response 响应类型(即返回对象)
responseContainer 声明包装的响应容器(返回对象类型)。有效值为 "List", "Set" or "Map"。
responseReference 指定对响应类型的引用。将覆盖任何指定的response()类
httpMethod 指定HTTP方法,"GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS" and "PATCH"
position 如果配置多个Api 想改变显示的顺序位置,在1.5版本后不再支持
nickname 第三方工具唯一标识,默认为空
produces 设置MIME类型列表(output),例:"application/json, application/xml",默认为空
consumes 设置MIME类型列表(input),例:"application/json, application/xml",默认为空
protocols 设置特定协议,例:http, https, ws, wss。
authorizations 获取授权列表(安全声明),如果未设置,则返回一个空的授权值。
hidden 默认为false, 配置为true 将在文档中隐藏
responseHeaders 响应头列表
code 响应的HTTP状态代码。默认 200
extensions 扩展属性列表数组
示例:
@ResponseBody
@PostMapping(value="/login")
@ApiOperation(value = "登录检测", notes="根据用户名、密码判断该用户是否存在")
public UserModel login(@RequestParam(value = "name", required = false) String account,
@RequestParam(value = "pass", required = false) String password){
}
4.1.3.@ApiImplicitParams
用在请求的方法上,表示一组参数说明
@ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面
常用参数:
name:参数名,参数名称可以覆盖方法参数名称,路径参数必须与方法参数一致
value:参数的汉字说明、解释
required:参数是否必须传,默认为false [路径参数必填]
paramType:参数放在哪个地方
· header --> 请求参数的获取:@RequestHeader
· query --> 请求参数的获取:@RequestParam
· path(用于restful接口)--> 请求参数的获取:@PathVariable
· body(不常用)
· form(不常用)
dataType:参数类型,默认String,其它值dataType="Integer"
defaultValue:参数的默认值
其他参数:
allowableValues 限制参数的可接受值。1.以逗号分隔的列表 2、范围值 3、设置最小值/最大值
access 允许从API文档中过滤参数。
allowMultiple 指定参数是否可以通过具有多个事件接受多个值,默认为false
example 单个示例
examples 参数示例。仅适用于BodyParameters
示例:
@ResponseBody
@PostMapping(value="/login")
@ApiOperation(value = "登录检测", notes="根据用户名、密码判断该用户是否存在")
@ApiImplicitParams({
@ApiImplicitParam(name = "name", value = "用户名", required = false, paramType = "query", dataType = "String"),
@ApiImplicitParam(name = "pass", value = "密码", required = false, paramType = "query", dataType = "String")
})
public UserModel login(@RequestParam(value = "name", required = false) String account,
@RequestParam(value = "pass", required = false) String password){
}
4.1.4.@ApiModel
用在请求的类上,表示对类的说明
用于响应类上,表示一个返回响应数据的信息(这种一般用在post创建的时候,使用@RequestBody这样的场景,请求参数无法使用@ApiImplicitParam注解进行描述的时候)
@ApiModelProperty:用在属性上,描述响应类的属性
常用参数:
value 此属性的简要说明。
name 允许覆盖属性名称
其他参数:
allowableValues 限制参数的可接受值。1.以逗号分隔的列表 2、范围值 3、设置最小值/最大值
access 允许从API文档中过滤属性。
notes 目前尚未使用。
dataType 参数的数据类型。可以是类名或者参数名,会覆盖类的属性名称。
required 参数是否必传,默认为false
position 允许在类中对属性进行排序。默认为0
hidden 允许在Swagger模型定义中隐藏该属性。
example 属性的示例。
readOnly 将属性设定为只读。
reference 指定对相应类型定义的引用,覆盖指定的任何参数值
示例:
@ApiModel(value="用户登录信息", description="用于判断用户是否存在")
public class UserModel implements Serializable{
private static final long serialVersionUID = 1L;
/**用户名 */
@ApiModelProperty(value="用户名")
private String account;
/**密码 */
@ApiModelProperty(value="密码")
private String password;
}
4.1.5.@ApiResponses
用在请求的方法上,表示一组响应
@ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息
常用参数:
code:数字,例如400
message:信息,例如"请求参数没填好"
response:抛出异常的类
示例:
@ResponseBody
@PostMapping(value="/update/{id}")
@ApiOperation(value = "修改用户信息",notes = "打开页面并修改指定用户信息")
@ApiResponses({
@ApiResponse(code=400,message="请求参数没填好"),
@ApiResponse(code=404,message="请求路径没有或页面跳转路径不对")
})
public JsonResult update(@PathVariable String id, UserModel model){
}
4.1.6.@ApiParam
用在请求方法中,描述参数信息
常用参数:
name:参数名称,参数名称可以覆盖方法参数名称,路径参数必须与方法参数一致
value:参数的简要说明。
defaultValue:参数默认值
required:属性是否必填,默认为false [路径参数必须填]
其他参数:
allowableValues 限制参数的可接受值。1.以逗号分隔的列表 2、范围值 3、设置最小值/最大值
access 允许从API文档中过滤参数。
allowMultiple 指定参数是否可以通过具有多个事件接受多个值,默认为false
hidden 隐藏参数列表中的参数。
example 单个示例
examples 参数示例。仅适用于BodyParameters
示例:
@ResponseBody
@PostMapping(value="/login")
@ApiOperation(value = "登录检测", notes="根据用户名、密码判断该用户是否存在")
public UserModel login(@ApiParam(name = "name", value = "用户名", required = false)
@RequestParam(value = "name", required = false)
String account,
@ApiParam(name = "pass", value = "密码", required = false)
@RequestParam(value = "pass", required = false)
String password){
}
//或以实体类为参数:
@ResponseBody
@PostMapping(value="/login")
@ApiOperation(value = "登录检测", notes="根据用户名、密码判断该用户是否存在")
public UserModel login(@ApiParam(name = "model", value = "用户信息Model") UserModel model){
}
边栏推荐
- How to add funding information when writing a paper with latex
- Pat class B 1010 univariate polynomial derivation (problem meaning understanding)
- Unity: quick positioning camera
- 互联网通信安全之终端数据保护
- Domestic ngrok achieves intranet penetration
- webFlux 中使用 openFeign 实现远程调用遇到的问题
- Cross entropy loss function
- Leetcode 116. fill in the next right node pointer of each node
- JVM system optimization
- Summary of all usage of join in SQL syntax (simple example)
猜你喜欢
JUC synchronizer
Flink learning notes (VII) processing function
OSI七层网络模型
Server disk IO performance tuning
二、IDEA搭建JFinal项目+代码自动生成+数据库操作测试(三种方式)
微信扫网址的二维码,却只显示链接地址,无法跳转到网页的解决办法
1. The solution of line feed qt5- "vs" in constants; 2. Problems and solutions of common compilation of QT and vs of the same code
Design of hydraulic system for power slide of horizontal single side multi axis drilling combined machine tool
协同办公市场暴增背后:融云通信能力是需求重点
Flink learning notes (VI) Flink's time and window
随机推荐
JUC synchronizer
在各类数据库中随机查询n条数据
Bull column - blog summary
MNIST handwritten numeral recognition case tensorflow 2.0 practice
(C language) is array a special pointer?
How to add funding information when writing a paper with latex
Thymeleaf中一个页面怎么嵌套另一个页面,关于页面嵌套,标签告诉你应该知道的
Problems encountered in using openfeign to realize remote call in Webflux
Leetcode:196. delete duplicate email
JVM tuning practice - start from scratch | summary of JVM tuning related to the project
OSI七层网络模型
Flink learning notes (IV) Flink runtime architecture
wget下载目录内的所有文件
Sub database and sub table
服务器运维环境安全体系(上篇)
MySQL execution process and sequence
1.qt view source code
Leetcode 116. fill in the next right node pointer of each node
程序员面试金典面试题 01.01. 判定字符是否唯一
Shell script debugging technology