• 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 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    Python 导入Excel三维坐标数据 生成三维曲面地形图(体) 5-3、线条平滑曲面且可通过面观察柱体变化(三)
    【Delphi】IOS 15 UDP 广播消息(局域网)
    【正点原子STM32连载】 第四十二章 IIC实验 摘自【正点原子】APM32F407最小系统板使用指南
    【原创】Ubuntu Pro RealTime linux(Ubuntu22.04 安装PREEMPT-RT实时内核/PREEMPT-RT/ubuntu官方PREEMPT-RT)
    JVM 程序计数器
    面向防疫的智能导诊机器人关键技术及应用
    【数据结构】详解链表结构
    计算机学院院长第一课——前辈的经验
    【微信小程序】解决分页this.setData数据量太大的限制问题
    OptiX8入门(一)optixHello
  • 原文地址:https://www.cnblogs.com/luisblog/p/16861008.html