swagger2 注解使用说明

本文深入解析Swagger常用注解,包括@Api、@ApiOperation、@ApiImplicitParam等,阐述其属性及使用场景,帮助开发者准确理解并运用Swagger注解,提升API文档的规范性和可读性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.注解说明

注解作用对象说明
@Apicontroller类对类的描述
@ApiOperation接口方法方法描述
@ApiImplicitParam接口方法

get单个传参时定义参数描述和是否必传

@ApiImplicitParams接口方法get对个传参时定义参数描述和是否必传,需要和@ApiImplicitParam配合使用
@ApiResponse接口方法定义返回状态说明,单个参数描述
@ApiResponses接口方法定义返回状态说明 ,多个状态描述,需要和@ApiResponse配合使用
@ApiModelJavaBean类描述JavaBean用途
@ApiModelPropertyJavaBean类的属性

描述属性的含义,作为传参对象时定义属性是否必传,作为返回对象时定义是否一定有值

2.注解属性说明及使用示例

2.1 @Api

属性名称说明
valueurl的路径值
tags如果设置这个值、value的值会被覆盖
description对api资源的描述,1.5.X版本后已经不再使用
basePath基本路径,1.5.X版本后已经不再使用
position如果配置多个Api 想改变显示的顺序位置,1.5.X版本后已经不再使用
produces如, “application/json, application/xml”
consumes如, “application/json, application/xml”
protocols协议类型,如: http, https, ws, wss.
authorizations高级特性认证时配置
hidden配置为true ,将在文档中隐藏

虽然看着挺多的属性,但是我们平时使用也就无外乎tags、value,下面是使用示例

@Api("登录模块")
@RestController
public class LoginController {


}

2.2 @ApiOperation

属性名称说明
value说明方法的作用
notes方法的备注说明

这个注解的属性还是比较多的,就不一一列出来了,一般常用的也就这两个,给个示例

    @ApiOperation(value = "账号密码登录接口", notes = "通过账号和密码登录")
    @PostMapping("/accountLogin")
    public String accountLogin (@RequestBody LoginVO loginVO) {
        if (!"admin".equals(loginVO)) {
            return "fail";
        }
        if (!"password".equals(loginVO)) {
            return "fail";
        }
        return "success";
    }

2.3 @ApiImplicitParam

属性名称说明
name参数名
value参数的说明、描述
required参数是否必填
paramTypequery使用@RequestParam 接收的参数
header使用@RequestHeader 接收的参数
path使用@PathVariable 接收参数
body使用 @RequestBody 接收参数
form普通表单提交
dataType参数类型,默认String,其它值dataType="Integer"
defaultValue参数的默认值

这个注解在平时用的还是很多的,当我们使用@RequestBody传参时一般不用这个注解,可以直接在Javabean的属性上直接加@ApiModelProperty注解,后面也会有讲解,下面是一般使用情形示例

@ApiOperation("验证码登录")
@GetMapping("/validateCodeLogin")
@ApiImplicitParam(name = "validateCode", value = "验证码", required = true, paramType = "query")
public String validateCodeLogin (@RequestParam("validateCode") String validateCode) {
    if (!"validateCode".equals(validateCode)) {
        return "fail";
    }
    return "success";
}

2.4 @ApiImplicitParams

这个主要是解决多个传参而产生的,没啥说的,看下面示例就清楚了

    @ApiOperation("查询指定年龄和性别的用户账号")
    @GetMapping("/findBy")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "age", value = "年龄", required = false, paramType = "query"),
            @ApiImplicitParam(name = "gender", value = "性别", required = true, paramType = "query")
    })
    @ResponseBody
    public List<UserInfoVO> findBy (@RequestParam("age") Integer age, 
                                    @RequestParam("gender") String gender) {
        // TODO 省略查询过程
        return new ArrayList<>();
    }

2.5 @ApiResponse @ApiResponses

属性名称说明
code请求返回的状态值,number类型
message状态描述
response抛出异常的类

这两个注解其实我在平常使用的不是很多,上个示例吧

    @ApiResponses({
            @ApiResponse(code = 200, message = "请求成功"),
            @ApiResponse(code = 400, message = "传参异常,请检查传参"),
            @ApiResponse(code = 404, message = "url不存在")
    })
    @ApiOperation("验证码登录")
    @GetMapping("/validateCodeLogin")
    @ApiImplicitParam(name = "validateCode", value = "验证码", required = true, paramType = "query")
    public String validateCodeLogin (@RequestParam("validateCode") String validateCode) {
        if (!"validateCode".equals(validateCode)) {
            return "fail";
        }
        return "success";
    }

2.6 @ApiModel

属性名称说明
value模型名称
description模型详细描述
parent为模型提供超类允许描述继承
discriminator用于支持多态和继承
subTypes从此模型继承的子类型的数组。
reference指定对相应类型定义的引用,覆盖指定的任何其他元数据

这个注解一般用来标记为swgger的解析类,使用示例

@ApiModel(description = "用户信息")
public class UserInfoVO {


}

2.7 @ApiModelProperty

属性名称说明
value属性简要说明
name属性名称
allowableValues限制此参数的可接受值
access过滤属性
notes备用属性,目前未使用
dataType参数的数据类型
required参数是否必须有值,作为参数时是否必传,返回参数时是否一定有值
position排序属性
hidden是否在Swagger模型定义中隐藏模型属性
example属性的样本值
readOnly模型属性指定为只读,不推荐使用
accessMode指定模型属性的访问模式(AccessMode.READ_ONLY,READ_WRITE)

这个注解用于对属性的说明和校验,接收参数为JSON格式时可以不使用@ApiImplicitParam注解,直接使用使用@ApiModelProperty即可,返回JSON格式时也可以直接被解析。

    @ApiResponse(code = 200, message = "请求成功")
    @ApiOperation(value = "账号密码登录接口", notes = "通过账号和密码登录")
    @PostMapping("/accountLogin")
    public String accountLogin (@RequestBody LoginVO loginVO) {
        if (!"admin".equals(loginVO)) {
            return "fail";
        }
        if (!"password".equals(loginVO)) {
            return "fail";
        }
        return "success";
    }
@ApiModel(description = "用户登录")
public class LoginVO implements Serializable {

    @ApiModelProperty(value = "账号", required = true, allowableValues = "123,456,789")
    private String account;

    @ApiModelProperty(value = "密码", required = true)
    private String password;

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

下面接口在yapi上的文档示例

3. 注意事项

  • swgger的所有对接口请求的限制都仅仅是显示在文档的,而没有侵入到接口逻辑中,千万不能用来替代业务逻辑使用;
  • @ApiModel内的注释不要出现相同,否则会将相同的vo内的字段进行合并;
  • @ApiModel的name和value中不能存在字符 ‘ / ’;
  • 在请求类型需要根据Rest接口规范来指定请求类型,不能直接使用@RequstMapping,否则会根据Rest规范中的类型全部生成一遍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值