swagger常用注解

目录

一.简介

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" "不符

  • 31
    点赞
  • 180
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Swagger 是一种用于构建、设计和文档化 RESTful API 的工具。它提供了一个简单易用的界面,让开发者可以定义 API 的各种细节,包括端点、参数、请求和响应等。Swagger 还可以根据用户的定义自动生成 OpenAPI JSON,这是一种机器可读的 API 文档格式。 Swagger 生成 OpenAPI JSON 的过程非常简单。首先,我们需要在 Swagger 的配置文件或注解中定义我们的 API。在定义 API 时,我们需要指定每个端点的路径、请求方法、请求参数、请求体和响应内容等。为了使生成的 OpenAPI JSON 更加准确和完整,我们还可以添加其他的元数据,比如 API 的标题、描述、版本号等。 当我们完成 API 的定义后,我们可以使用 Swagger 提供的工具自动生成 OpenAPI JSON。通常,我们只需要运行一条命令或点击一个按钮,Swagger 就会根据我们的定义扫描我们的 API,并生成一份符合 OpenAPI 规范的 JSON 文件。这份文件包含了 API 的详细信息,包括端点的路径、请求方法、请求和响应的参数等。生成的 JSON 文件可以供其他开发者和工具使用,比如用于生成文档、进行代码生成等。 总之,Swagger 是一个强大的工具,可以帮助我们快速构建、设计和文档化 RESTful API。通过定义 API,并使用 Swagger 提供的工具生成 OpenAPI JSON,我们可以更方便地与其他开发者进行协作,并提供高质量的 API 文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值