• 5-整合swagger2


    Swagger介绍

    (1)简介

    Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务(https://swagger.io/)。 它的主要作用是:

    1. 使得前后端分离开发更加方便,有利于团队协作
    2. 接口的文档在线自动生成,降低后端开发人员编写接口文档的负担
    3. 功能测试

    Spring已经将Swagger纳入自身的标准,建立了Spring-swagger项目,现在叫Springfox。通过在项目中引入Springfox ,即可非常简单快捷的使用Swagger。

    (2)SpringBoot集成Swagger

    • 引入依赖,在zs-blog-model模块中引入该依赖
      <dependency>
          <groupId>io.springfoxgroupId>
          <artifactId>springfox-swagger2artifactId>
      dependency>
      <dependency>
          <groupId>io.springfoxgroupId>
          <artifactId>springfox-swagger-uiartifactId>
      dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    只需要在zs-blog-common中进行配置即可,因为其他微服务工程都直接或间接依赖即可。

    • 在zs-blog-admin工程的config包中添加一个配置类
    package com.zs.admin.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import springfox.documentation.builders.ApiInfoBuilder;
    import springfox.documentation.builders.PathSelectors;
    import springfox.documentation.builders.RequestHandlerSelectors;
    import springfox.documentation.service.ApiInfo;
    import springfox.documentation.service.Contact;
    import springfox.documentation.spi.DocumentationType;
    import springfox.documentation.spring.web.plugins.Docket;
    import springfox.documentation.swagger2.annotations.EnableSwagger2;
    
    @Configuration
    @EnableSwagger2
    public class SwaggerConfiguration {
    
       @Bean
       public Docket buildDocket() {
          return new Docket(DocumentationType.SWAGGER_2)
                  .enable(true) //可以读取配置进行控制
                  .apiInfo(buildApiInfo())
                  .select()
                  // 要扫描的API(Controller)基础包
                  .apis(RequestHandlerSelectors.basePackage("com.zs"))
                  .paths(PathSelectors.any())
                  .build();
       }
    
       private ApiInfo buildApiInfo() {
          Contact contact = new Contact("张邵的博客项目","","");
          return new ApiInfoBuilder()
                  .title("zs博客-平台管理API文档")
                  .description("平台管理服务api")
                  .contact(contact)
                  .version("1.0.0").build();
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    (3)Swagger常用注解

    在Java类中添加Swagger的注解即可生成Swagger接口文档,常用Swagger注解如下:

    ==@Api:==修饰整个类,描述Controller的作用

    ==@ApiOperation:==描述一个类的一个方法,或者说一个接口

    @ApiParam:单个参数的描述信息

    @ApiModel:用对象来接收参数

    @ApiModelProperty:对象接收参数时,描述对象的一个字段

    @ApiResponse:HTTP响应其中1个描述

    @ApiResponses:HTTP响应整体描述

    @ApiIgnore:使用该注解忽略这个API

    @ApiError :发生错误返回的信息

    @ApiImplicitParam:一个请求参数

    @ApiImplicitParams:多个请求参数的描述信息

    @ApiImplicitParam属性:

    属性取值作用
    paramType查询参数类型
    path以地址的形式提交数据
    query直接跟参数完成自动映射赋值
    body以流的形式提交 仅支持POST
    header参数在request headers 里边提交
    form以form表单的形式提交 仅支持POST
    dataType参数的数据类型 只作为标志说明,并没有实际验证
    Long
    String
    name接收参数名
    value接收参数的意义描述
    required参数是否必填
    true必填
    false非必填
    defaultValue默认值
    @Api(value = "频道管理", tags = "channel", description = "频道管理API")
    public interface AdChannelControllerApi {
    
        /**
         * 根据名称分页查询频道列表
         * @param dto
         * @return
         */
        @ApiOperation(value = "频道分页列表查询", notes = "获取一页频道列表")
        public ResponseResult findByNameAndPage(ChannelDto dto);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    @Data
    @Slf4j
    public class PageRequestDto {
    
        @ApiModelProperty(value="当前页",required = true)
        protected Integer size;
        @ApiModelProperty(value="每页显示条数",required = true)
        protected Integer page;
    
        public void checkParam() {
            if (this.page == null || this.page < 0) {
                setPage(1);
            }
            if (this.size == null || this.size < 0 || this.size > 100) {
                setSize(10);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    @Api(value = "频道管理", tags = "channel", description = "频道管理API")
    public interface AdChannelControllerApi {
    
        /**
         * 根据名称分页查询频道列表
         * @param dto
         * @return
         */
        @ApiOperation(value = "频道分页列表查询", notes = "获取一页频道列表")
      	@ApiImplictParams({
          @ApiImplicitParam(name = "pageNum",value = "页号"),
          @ApiImplicitParam(name = "pageSize", value = "每页大小")
        })
        public ResponseResult findByNameAndPage(Integer pageNum,Integer pageSize);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    【Vue】(二)Vue组件化思想、全局组件与局部组件、父子组件、父子组件通信、slot-插槽
    NLog详解
    弘辽科技:淘宝旧链接如何打新品标?有什么规则?
    [Database] 脏读、幻读这些都是什么?事务隔离级别又是什么?MySQL数据库的事务隔离级别都有哪些?
    2023/09/07 c++&qt day2
    面试官:MySQL explain你会关注哪些字段
    MATLAB——线性神经网络预测程序
    时间复杂度
    思腾云计算
    C语言学习教程
  • 原文地址:https://blog.csdn.net/weixin_44235759/article/details/126025945