• Spring Boot 中使用 Swagger


    前后端分离开发,后端需要编写接⼝说明⽂档,会耗费⽐较多的时间。
    swagger 是⼀个⽤于⽣成服务器接⼝的规范性⽂档,并且能够对接⼝进⾏测试的⼯具。

    作用

    • ⽣成接⼝说明⽂档
    • 对接⼝进⾏测试

    使用步骤

    1. 添加依赖

      
      <dependency>
          <groupId>io.springfoxgroupId>
          <artifactId>springfox-swagger2artifactId>
          <version>2.9.2version>
      dependency>
      <dependency>
          <groupId>io.springfoxgroupId>
          <artifactId>springfox-swagger-uiartifactId>
          <version>2.9.2version>
      dependency>
      
    2. 写配置类 SwaggerConfig

      /**
       * SwaggerConfig 接口文档配置类
       */
      @Configuration
      @EnableSwagger2
      public class SwaggerConfig {
      
          /**
           * 配置接口文档生成规则
           */
          @Bean
          public Docket getDocket() {
              // 设置文档生成规则
              return new Docket(DocumentationType.SWAGGER_2)
                      .apiInfo(apiInfo()) // 设置文档信息
                      .select()
                      // 设置哪个包下的类需要生成文档
                     .apis(RequestHandlerSelectors.basePackage("com.luis.fmmall.controller"))
                      .paths(PathSelectors.any()) // 定义哪些路径的接口需要生成文档
                      .build();
      
          }
      
          /**
           * 设置文档信息
           */
          private ApiInfo apiInfo() {
              return new ApiInfoBuilder()
                      .title("xxx接口文档")
                      .description("这里是相关描述")
                      .version("1.0")
                      .contact(new Contact("luis",
                              "https://www.cnblogs.com/luisblog",
                              "xxx@qq.com"))
                      .build();
          }
      }
      
    3. 在控制器类上使用 Swagger 的注解进行相关说明

      示例如下:

      @RestController
      @RequestMapping("/user")
      @Api(tags = "用户管理", value = "提供用户的登陆、注册、修改等功能") //类说明
      public class UserController {
      
          @Resource
          private UserService userService;
      
          @GetMapping("/login")
          @ApiOperation(value = "登陆验证", notes = "用户登陆检查") //方法名说明
          @ApiImplicitParams({ //参数说明
                  @ApiImplicitParam(dataType = "string", name = "username", value = "用户名", required = true),
                  @ApiImplicitParam(dataType = "string", name = "password", value = "用户密码", required = false, defaultValue = "123")
          })
          public ResultVo login(@RequestParam("username") String name,
                                @RequestParam(value = "password", defaultValue = "123") String pwd) {
              return userService.checkLogin(name, pwd);
          }
      }
      
    4. 启动 SpringBoot 应用,访问 http://localhost:8080/swagger-ui.html

      效果如下:

      image-20221105192723545

    常用注解说明

    • @Api:类注解,使用在控制器类上,对类进行说明

      控制器类 UserController 示例:

      @Api(tags = "用户管理", value = "提供用户的登陆、注册、修改等功能") //类说明
      public class UserController {
      }
      
    • @ApiOperation:方法注解,使用在方法上,对方法名进行说明

    • @ApiImplicitParam 和 @ApiImplicitParams:方法注解,使用在方法上,对方法的形参进行说明

      单个形参使用 @ApiImplicitParam,多个形参使用 @ApiImplicitParams

      控制器类 UserController 的 login 方法示例:

      @GetMapping("/login")
      @ApiOperation(value = "登陆验证", notes = "用户登陆检查") //方法名说明
      @ApiImplicitParams({ //参数说明
          @ApiImplicitParam(dataType = "string", name = "username", value = "用户名", required = true),
          @ApiImplicitParam(dataType = "string", name = "password", value = "用户密码", required = false, defaultValue = "123")
      })
      public ResultVo login(@RequestParam("username") String name,
                            @RequestParam(value = "password", defaultValue = "123") String pwd) {
          return userService.checkLogin(name, pwd);
      }
      
    • @ApiModel 和 @ApiModelProperty:当接⼝的形参或返回值为对象类型时,在实体类中添加此注解说明

      接口的返回值为 ResultVo 对象示例:

      @Data
      @NoArgsConstructor
      @AllArgsConstructor
      @ApiModel(value = "ResultVo 对象", description = "返回给前端的封装数据") //返回的类说明
      public class ResultVo {
      
          // 响应给前端的状态码
          @ApiModelProperty("响应状态码") //属性说明
          private int code;
      
          // 响应给前端的提示信息
          @ApiModelProperty("提示信息") //属性说明
          private String msg;
      
          // 响应给前端的数据
          @ApiModelProperty("数据") //属性说明
          private Object data;
      }
      

      接口的形参为 User 实体对象示例:

      @Data
      @NoArgsConstructor
      @AllArgsConstructor
      @ApiModel(value = "User 对象",description = "⽤户/买家信息")
      public class User {
      	@ApiModelProperty(dataType = "int",required = false)
          private int userId;
          @ApiModelProperty(dataType = "String",required = true, value = "⽤
          户注册账号")
          private String userName;
          @ApiModelProperty(dataType = "String",required = true, value = "⽤
          户注册密码")
          private String userPwd;
          @ApiModelProperty(dataType = "String",required = true, value = "⽤
          户真实姓名")
          private String userRealname;
          @ApiModelProperty(dataType = "String",required = true, value = "⽤
          户头像url")
          private String userImg;
      }
      
    • @ApiIgnore:接⼝⽅法注解,添加此注解的⽅法将不会⽣成到接⼝⽂档中

    swagger-ui 插件

    发现一个规律,越学到最后,越是有惊喜,有不有?

    swagger-ui 插件是一款 UI 美化插件,是基于 swagger 的。

    之前使用的默认 swagger 文档和调试页面如果使用起来不太顺畅,可以试试这款 swagger-ui 插件。

    使用

    1. 添加依赖

      <dependency>
          <groupId>com.github.xiaoymingroupId>
          <artifactId>swagger-bootstrap-uiartifactId>
          <version>1.9.6version>
      dependency>
      
    2. 重启 SpringBoot 应用,访问 http://localhost:8080/doc.html

      效果如下:

      image-20221105201711129

      image-20221105201811383

      image-20221105201840799

    还等什么,赶紧装插件去~


    __EOF__

  • 本文作者: Luis
  • 本文链接: https://www.cnblogs.com/luisblog/p/16861008.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。
  • 相关阅读:
    MySQL更新锁表超时 Lock wait timeout exceeded
    Python 函数的定义
    Vue / 认识Vue 创建Vue脚手架
    【分享】教你加速访问GitHub,进来学!
    Pandas 分组数据分析
    leetcode 343 整数拆分
    用Excel制作甘特图跟踪项目进度(附绘制教程)
    66从零开始学Java之集合中的Collection体系
    ZCU102启动镜像(详细版)
    Flink水位线-详细说明
  • 原文地址:https://www.cnblogs.com/luisblog/p/16861008.html