Swagger2 详解

1、Swagger2简介

当下很多公司都采取前后端分离的开发模式,前端和后端的工作由不同的工程师完成。在这种开发模式下,维持一份及时更新且完整的 Rest API 文档将会极大的提高我们的工作效率。传统意义上的文档都是后端开发人员手动编写的,相信大家也都知道这种方式很难保证文档的及时性,这种文档久而久之也就会失去其参考意义,反而还会加大我们的沟通成本。而 Swagger 给我们提供了一个全新的维护 API 文档的方式。

2、依赖引入

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

3、启动类配置

在使用 Springboot 项目时,我们还需要在启动类添加 @EnableSwagger2 注解。
这个时候我们添加一个controller并写入方法,直接启动项目打开swagger-ui http://localhost:8080/swagger-ui.html

4、添加Swagger配置类

我们添加一个用于配置SwaggerUI的配置类。

    @Bean
    public Docket docket(){
        Docket docket = new Docket(DocumentationType.SWAGGER_2);
        ApiInfo apiInfo = new ApiInfoBuilder().contact(new Contact("lzq","http://www.baidu.com","2645922971@qq.com"))
                .title("Lzq-Api")
                .description("Lzq-Api-Swagger-description")
                .version("1.0")
                .build();
        docket.apiInfo(apiInfo);
        return docket;
    }

在这里插入图片描述
还可添加指定扫描的包

        // 扫描指定包
        docket
                .select()
                // 方法上有注解@AnnoSwagger的时候返回true 最后取反
                .apis(Predicates.not(RequestHandlerSelectors.withMethodAnnotation(AnnoSwagger.class)))
                // 限制生成API文档的路径地址
                // 还可以使用 Predicates 的 and or 方法进行或且 运算
                .paths(PathSelectors.regex("/swagger/.*"))
                // 调用build重新构建
                .build();
                // 只能调一次 不可覆盖
                // .apis(RequestHandlerSelectors.basePackage("com.lzq.controller"));

并且这里的AnnoSwagger是一个自定义注解,用来限制Swagger文档不进行显示对应的方法

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface AnnoSwagger {
}

5、相关注解详解

5.1、@Api

tags 给当前类型定义别名 可以有多个,description 当前类型生成的帮助文档的描述信息

@Api(tags = {"hellloController", "SwaggerDemoController"}, description = "swagger-Api-controller")

5.2、@ApiOperation

用来描述方法

@ApiOperation(value = "hello", notes = "hello method get request")

5.3、@ApiParam

作用于入参,用来描述参数

@ApiParam(name = "用户名", value = "value - 用户名", required = true) String name

5.4、@ApiImplicitParam

作用于方法,用来描述参数

@ApiImplicitParam(name = "name", value = "name - value", required = true, paramType = "String")

5.5、@ApiImplicitParams

作用于方法,用来描述多个参数

    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "name", value = "name - value", required = true, paramType = "String"),
            @ApiImplicitParam(name = "PassWord", value = "PassWord - value", required = true, paramType = "String")
    })

5.6、@ApiIgnore

作用于方法,用来忽略生成该方法的Api文档

5.7、@ApiModel

作用于实体类,当成为帮助文档上的接口返回值类型时,即被解析

@ApiModel(value = "自定义实体类", description = "User Object")

5.8、@ApiModelProperty

作用于实体类对应的属性,进行描述

    @ApiModelProperty(value = "姓名 - value", name = "姓名 - name", required = false, example = "月月鸟", hidden = false)
    private String name;

6、Swagger-UI的使用

对于返回实体类可以在Models当中查看,其余方法(请求接口)在对应的controller类当中进行查看。

在这里插入图片描述
7、swagger2报错Illegal DefaultValue null for parameter type integer
这是由于实体类使用@ApiModelProperty时,example属性没有赋值导致的,在AbstractSerializableParameter的getExample方法中会将数值属性的example的转换数值类返回,example的默认值是"",因此当example没有赋值时,会出现上面的异常。

只需要在引入依赖时进行调整即可

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
            <exclusions>
                <exclusion>
                    <groupId>io.swagger</groupId>
                    <artifactId>swagger-annotations</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>io.swagger</groupId>
                    <artifactId>swagger-models</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- swagger-ui -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
        <!-- 解决swagger报错Illegal DefaultValue null for parameter type integer -->
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>1.5.22</version>
        </dependency>
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-models</artifactId>
            <version>1.5.22</version>
        </dependency>

在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Modify_QmQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值