Swagger学习笔记

常用注解使用规范

写这部分内容是因为Swagger注解有的属性设置后无效,有的属性设置后会使可读性降低(页面显示效果不好),所以在这记录一下个人认为比较简洁的设置方式

@Api

设置 tags 属性即可,value 会被 tags 替代没卵用,tags 属性的内容会被显示到 Controller 类名前

@ApiOperation

只指定 value 属性对接口进行简单描述即可,该属性会显示到请求路径之后,设置 tags 属性会在页面上单独将该方法显示出来,比较乱,不推荐设置

@ApiParam

不需要指定 name,指定 value 和 required 即可,name 的作用是更改参数的显示名称,这样的话前端会将 name 的值而不是实际的参数名称当作传参时的参数名称,容易产生混淆,自找麻烦,并且 name 属性对于使用了 @RequestBody 注解的参数不起作用

@ApiModel

添加 description 属性即可,该属性会被添加到 models 列表中 model 的 description 字段,value 作用和上述的 name 作用类似,会对 model 改名显示,容易产生混淆

@ApiModelProperty

value 为属性的简单描述,example 指定该属性的示例值,required指定是否为必须,三个属性都可以指定

控制器注解的位置

Swagger是一个用来生成接口文档的工具,既然是生成接口文档,那么就不必关心业务的具体实现,平时在开发过程中也都是先定义接口,需要的时候再去创建Controller实现对应业务的接口,所以Swagger关于控制器的注解如 @Api@ApiOperation 等都可以放到 Controller 的接口文件中

这样做的好处有:

  • 接口实现类不用关心不属于业务范畴的(接口文档生成)相关操作
  • 接口实现类的内容更加简洁
  • 针对开放Api,Swagger的注解可以替代注释的角色,相当于写接口文档的同时又写了注释,一举两得
  • Controller 层实现 Feign 调用接口提供更好的服务

常见问题

使用Swagger时由于Swagger会默认设置 Models 属性的默认值为空字符串 "" ,而在生成文档的解析过程中又只对 null 进行了判断而没有对空字符串进行判断,导致测试时出现许多莫名奇妙的 java.lang. NumberFormatException: For input string: "" 错误

解决办法:

首先排除swagger2中 swagger-models-1.5.20 版本的依赖

<dependency>

    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <exclusions>
        <exclusion>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-models</artifactId>
        </exclusion>
    </exclusions>

</dependency>

然后添加 >= 1.5.21 版本,这些版本已解决只判断 null 不判断 "" 的问题

<dependency>

    <groupId>io.swagger</groupId>
    <artifactId>swagger-models</artifactId>
    <version>1.5.21</version>

</dependency>
posted @ 2021-08-22 17:40  lwh147  阅读(107)  评论(0编辑  收藏  举报