zl程序教程

您现在的位置是:首页 >  其他

当前栏目

swagger常用注解

2023-04-18 15:44:32 时间

目录

一.简介

1.什么是swagger

2.swagger的特征

3.swagger依赖包

二.swagger常用注解

1.@Api

 2.@ApiOperation

3.@ApiParam

4.@ApiImplicitParams、@ApiImplicitParam

5.@ApiResponses、@ApiResponse

6.@ApiModel、@ApiModelProperty

7.@PathVariable

 三.注解使用注意点


一.简介

1.什么是swagger

Swagger是一个开放源代码软件框架,由大型工具生态系统支持,可帮助开发人员设计,构建,记录和使用RESTful Web服务。尽管大多数用户通过Swagger UI工具识别Swagger,但是Swagger工具集包括对自动文档,代码生成和测试用例生成的支持。

2.swagger的特征

1. 通过代码和注释自动生成文档。在Swagger框架下,开发人员可对服务进行归类说明,对方法,模型,返回结果等进行详细说明。方便开发人员在编写代码的同时,编写文档信息。自动生成,只需很少的编辑工作,就能获得完整的REST APIs文档

2. 提供了UI界面。既展示接口信息,又提供了参数校验,测试功能

3. 形成了文档规范,支持不同的语言

4. 提供丰富的组件。

3.swagger依赖包

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

二.swagger常用注解

1.@Api

@Api 注解用于标注一个Controller(Class)。在默认情况下,Swagger-Core只会扫描解析具有@Api注解的类,而会自动忽略其他类别资源(JAX-RS endpoints,Servlets等等)的注解。

属性描述
valueurl的路径值
tags如果设置这个值、value的值会被覆盖
description对api资源的描述
basePath基本路径可以不配置
position如果配置多个Api 想改变显示的顺序位置
producesFor example, "application/json, application/xml"
consumesFor example, "application/json, application/xml"
protocolsPossible 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请求方法及路径组合构成一个唯一操作。

主要属性:

属性描述
valueurl的路径值
tags如果设置这个值、value的值会被覆盖
description对api资源的描述
basePath基本路径可以不配置
position如果配置多个Api 想改变显示的顺序位置
producesFor example, "application/json, application/xml"
consumesFor example, "application/json, application/xml"
protocolsPossible values: http, https, ws, wss.
authorizations高级特性认证时配置
hidden配置为true 将在文档中隐藏
response返回的对象
responseContainer这些对象是有效的 "List", "Set" or "Map".,其他无效
httpMethod"GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS" and "PATCH"
codehttp的状态码 默认 200
extensions扩展属性

3.@ApiParam

@ApiParam作用于请求方法上,定义api参数的注解。

主要属性:

属性描述
name属性名称
value属性值
defaultValue默认属性值
allowableValues可以不配置
required是否属性必填
access不过多描述
allowMultiple默认为false
hidden隐藏该属性
example举例子

代码示例:

public ResponseEntity<User> 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"类型所以我们将其省略

/**
 * <pre>
 *  登录API接口
 * </pre>
 *
 * @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);
	}

5.@ApiResponses、@ApiResponse

@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 用在属性上,对属性作注解

代码演示:

/**
 * <pre>
 *     人员信息类
 * </pre>
 *
 */
@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;
}

7.@PathVariable

@PathVariable用于获取get请求url路径上的参数,即参数绑定的作用,通俗的说是url中"?"前面绑定的参数。

代码示例:

复制代码
 /**
     * 人员信息
     */
    @GetMapping("/info/{id}")
    @RequiresPermissions("tour:vehicle:info:info")
    @ApiOperation(value = "获取user对象详情", notes = "查看人员信息")
    public ApiResult<UserQueryVo> getTourVehicleInfo(@PathVariable("id") Long id) throws Exception {
        UserQueryVo userQueryVo= userService.getTourVehicleInfoById(id);
        return ApiResult.ok(userQueryVo);
    }

 三.注解使用注意点

   1.为了在swagger-ui上看到输出,至少需要两个注解:@Api和@ApiOperation
   2.即使只有一个@ApiResponse,也需要使用@ApiResponses包住使用
   3.对于@ApiImplicitParam的paramType: query,from域中的值需要使用@RequerstParam获取,       header域中的只需要使用@RequestHeader来获取,path域中的值需要使用@PathVariable来获       取,body域中的值使用@RequestBody来获取,否则可能出错;而且如果paramType是body,name不     能是body,否则有问题,与官方文档中的"if paramType is "body",the name should be "body" "不符