1.什么是swagger
Swagger是一个开放源代码软件框架,由大型工具生态系统支持,可帮助开发人员设计,构建,记录和使用RESTful Web服务。尽管大多数用户通过Swagger UI工具识别Swagger,但是Swagger工具集包括对自动文档,代码生成和测试用例生成的支持。
2.swagger的特征
1. 通过代码和注释自动生成文档。在Swagger框架下,开发人员可对服务进行归类说明,对方法,模型,返回结果等进行详细说明。方便开发人员在编写代码的同时,编写文档信息。自动生成,只需很少的编辑工作,就能获得完整的REST APIs文档
2. 提供了UI界面。既展示接口信息,又提供了参数校验,测试功能
3. 形成了文档规范,支持不同的语言
4. 提供丰富的组件。
3.swagger依赖包
io.springfox
springfox-swagger2
io.springfox
springfox-swagger-ui
1.@Api
@Api 注解用于标注一个Controller(Class)。在默认情况下,Swagger-Core只会扫描解析具有@Api注解的类,而会自动忽略其他类别资源(JAX-RS endpoints,Servlets等等)的注解。
属性 描述
value url的路径值
tags 如果设置这个值、value的值会被覆盖
description 对api资源的描述
basePath 基本路径可以不配置
position 如果配置多个Api 想改变显示的顺序位置
produces For example, "application/json, application/xml"
consumes For example, "application/json, application/xml"
protocols Possible values: http, https, ws, wss.
authorizations 高级特性认证时配置
hidden 配置为true 将在文档中隐藏
示例代码:
@Controller
@Slf4j
@RequestMapping("/user")
@Api(tags = "人员信息 API", description = "提供人员信息相关的 Rest API")
public class UserController extends BaseController {
}
2.@ApiOperation
@ApiOperation 注解在用于对一个操作或HTTP方法进行描述。具有相同路径的不同操作会被归组为同一个操作对象。不同的HTTP请求方法及路径组合构成一个唯一操作。
主要属性:
属性 描述
value url的路径值
tags 如果设置这个值、value的值会被覆盖
description 对api资源的描述
basePath 基本路径可以不配置
position 如果配置多个Api 想改变显示的顺序位置
produces For example, "application/json, application/xml"
consumes For example, "application/json, application/xml"
protocols Possible values: http, https, ws, wss.
authorizations 高级特性认证时配置
hidden 配置为true 将在文档中隐藏
response 返回的对象
responseContainer 这些对象是有效的 "List", "Set" or "Map".,其他无效
httpMethod "GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS" and "PATCH"
code http的状态码 默认 200
extensions 扩展属性
3.@ApiParam
@ApiParam作用于请求方法上,定义api参数的注解。
主要属性:
属性 描述
name 属性名称
value 属性值
defaultValue 默认属性值
allowableValues 可以不配置
required 是否属性必填
access 不过多描述
allowMultiple 默认为false
hidden 隐藏该属性
example 举例子
代码示例:
public ResponseEntity getUserById(
@ApiParam(value = "ID of user that needs to be fetched", allowableValues = "range[1,10]", required = true)
@PathVariable("UserId") Long userId)
4.@ApiImplicitParams、@ApiImplicitParam
@ApiImplicitParams、@ApiImplicitParam 都可以定义参数.
(1).@ApiImplicitParams:用在请求的方法上,包含一组参数说明
(2).@ApiImplicitParam:对单个参数的说明
主要属性:
属性 描述
name 参数名
value 参数的说明、描述
required 参数是否必须必填
paramType 参数放在哪个地方
query --> 请求参数的获取:@RequestParam
header --> 请求参数的获取:@RequestHeader
path(用于restful接口)--> 请求参数的获取:@PathVariable
body(请求体)--> @RequestBody User user
form(普通表单提交)
dataType 参数类型,默认String,其它值dataType="Integer"
defaultValue 参数的默认值
代码示例:
提示:根据dataTtype属性的描述我们的"手机号","密码"都是"String"类型所以我们将其省略
/**
*
* 登录API接口
*
*
* @since 2022-06-10
*/
@ApiImplicitParams({
//参数效验
@ApiImplicitParam(name="phonenum",value="手机号",required=true,paramType="form"),
@ApiImplicitParam(name="password",value="密码",required=true,paramType="form"),
@ApiImplicitParam(name="age",value="年龄",required=true,paramType="form",dataType="Integer")
})
@PostMapping("/login")
public ApiResult login(@RequestParam String mobile, @RequestParam String password,
@RequestParam Integer age){
//...
return JsonResult.ok(map);
}
@ApiResponses、@ApiResponse进行方法返回对象的说明。
主要属性:
属性 | 描述 |
---|---|
code | 数字,例如400 |
message | 信息,例如"请求参数没填好" |
response | 抛出异常的类 |
代码示例:
@ApiResponses({
@ApiResponse(code = 200, message = "请求成功"),
@ApiResponse(code = 400, message = "请求参数没填好"),
@ApiResponse(code = 404, message = "请求路径没有或页面跳转路径不对")
})
@ResponseBody
@RequestMapping("/user")
public ApiResult getUser(@RequestParam String userId) {
...
}
6.@ApiModel、@ApiModelProperty
@ApiModel用于描述一个Model的信息(这种一般用在post创建的时候,使用@RequestBody这样的场景,请求参数无法使用@ApiImplicitParam注解进行描述的时候)。
@ApiModelProperty用来描述一个Model的属性
使用场景
@ApiModel 用在模型类上,对模型类作注解
@ApiModelProperty 用在属性上,对属性作注解
代码演示:
/**
*
* 人员信息类
*
*
*/
@Data
@ApiModel(description= "返回人员信息")
public class UserQueryVo extends BaseEntity{
@ApiModelProperty(value = "主键", required = true)
@TableId(value = "id", type = IdType.ID_WORKER)
private Long id;
@ApiModelProperty(value = "手机号", required = true)
private String phonenum;
@ApiModelProperty(value = "密码", required = true)
private String password;
@ApiModelProperty(value = "年龄", required = true)
private Integer age;
}
在浏览器中访问端口号对应的地址即可查看接口文档
http://localhost:8442/swagger-ui.html#/