zoukankan      html  css  js  c++  java
  • zbb20181221 swagger2,swagger,springboot接口文档

    1:认识Swagger

    Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。

     作用:

        1. 接口的文档在线自动生成。

        2. 功能测试。

     Swagger是一组开源项目,其中主要要项目如下:

    1.   Swagger-tools:提供各种与Swagger进行集成和交互的工具。例如模式检验、Swagger 1.2文档转换成Swagger 2.0文档等功能。

    2.   Swagger-core: 用于Java/Scala的的Swagger实现。与JAX-RS(Jersey、Resteasy、CXF...)、Servlets和Play框架进行集成。

    3.   Swagger-js: 用于JavaScript的Swagger实现。

    4.   Swagger-node-express: Swagger模块,用于node.js的Express web应用框架。

    5.   Swagger-ui:一个无依赖的HTML、JS和CSS集合,可以为Swagger兼容API动态生成优雅文档。

    6.   Swagger-codegen:一个模板驱动引擎,通过分析用户Swagger资源声明以各种语言生成客户端代码。

    2:Maven

     <!-- Swagger API文档 -->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>2.7.0</version>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>2.7.0</version>
            </dependency>

    3:创建Swagger2Config配置类

    
    

    package com.zbb.app.config;

    
    

    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;

    
    

    import io.swagger.annotations.ApiOperation;
    import lombok.extern.slf4j.Slf4j;
    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;

    
    

    /**
    * Swagger2配置类
    * 在与spring boot集成时,放在与Application.java同级的目录下。
    * 通过@Configuration注解,让Spring来加载该类配置。
    * 再通过@EnableSwagger2注解来启用Swagger2。
    */
    @Slf4j
    @Configuration
    @EnableSwagger2
    public class Swagger2Config {

    
    

    @Value("${swagger.title}")
    private String title;

    
    

    @Value("${swagger.description}")
    private String description;

    
    

    @Value("${swagger.version}")
    private String version;

    
    

    @Value("${swagger.termsOfServiceUrl}")
    private String termsOfServiceUrl;

    
    

    @Value("${swagger.contact.name}")
    private String name;

    
    

    @Value("${swagger.contact.url}")
    private String url;

    
    

    @Value("${swagger.contact.email}")
    private String email;

    
    

    /**
    * 创建API应用
    * apiInfo() 增加API相关信息
    * 通过select()函数返回一个ApiSelectorBuilder实例,用来控制哪些接口暴露给Swagger来展现,
    * 本例采用指定扫描的包路径来定义指定要建立API的目录。
    *
    */
    @Bean
    public Docket createRestApi() {

    
    

    log.info("加载Swagger2");

    
    

    return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
    // 扫描所有有注解的api,用这种方式更灵活
    .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
    .paths(PathSelectors.any()).build();
    }

    
    

    /**
    * 创建该API的基本信息(这些基本信息会展现在文档页面中)
    * 访问地址:http://项目实际地址/swagger-ui.html
    * @return
    */
    private ApiInfo apiInfo() {
    return new ApiInfoBuilder().title(title).description(description)
    .termsOfServiceUrl(termsOfServiceUrl).contact(new Contact(name, url, email))
    .version(version).build();
    }
    }

     

    4:配置application.yml

    spring:
        aop:
            auto: true
            proxy-target-class: true
    # 忽略鉴权url
    ignored:
      urls:
      - /app/common/admin/getUserTypeList
      - /app/common/admin/sendAuthCodeN
    # Swagger界面内容配置
    swagger:
      title: app API接口文档
      description: app Api Documentation
      version: 1.0.0
      termsOfServiceUrl: https://www.cnblogs.com/super-admin/
      contact:
        name: zhaozhen02
        url: https://www.cnblogs.com/super-admin/
        email: zhaozhen02@qq.com

    4:访问地址

    http://localhost:8080/swagger-ui.html

    5:添加文档内容

    在完成了上述配置后,其实已经可以生产文档内容,但是这样的文档主要针对请求本身,描述的主要来源是函数的命名,对用户并不友好,我们通常需要自己增加一些说明来丰富文档内容。

    Swagger使用的注解及其说明:

    @Api:用在类上,说明该类的作用。

    @ApiOperation:注解来给API增加方法说明。

    @ApiImplicitParams : 用在方法上包含一组参数说明。

    @ApiImplicitParam:用来注解来给方法入参增加说明。

    @ApiResponses:用于表示一组响应

    @ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息

        l   code:数字,例如400

        l   message:信息,例如"请求参数没填好"

        l   response:抛出异常的类   

    @ApiModel:描述一个Model的信息(一般用在请求参数无法使用@ApiImplicitParam注解进行描述的时候)

        l   @ApiModelProperty:描述一个model的属性

    注意:@ApiImplicitParam的参数说明:

    paramType:指定参数放在哪个地方

    header:请求参数放置于Request Header,使用@RequestHeader获取

    query:请求参数放置于请求地址,使用@RequestParam获取

    path:(用于restful接口)-->请求参数的获取:@PathVariable

    body:(不常用)

    form(不常用)

    name:参数名

    dataType:参数类型

    required:参数是否必须传

    true | false

    value:说明参数的意思

    defaultValue:参数的默认值

     

    6:参考

    http://blog.didispace.com/springbootswagger2/

    http://blog.csdn.net/jia20003/article/details/50700736

    Swagger官网 :http://swagger.io/

    Spring Boot & Swagger UI : http://fruzenshtein.com/spring-boot-swagger-ui/

    Github:https://github.com/swagger-api/swagger-core/wiki/Annotations

  • 相关阅读:
    jackson 枚举 enum json 解析类型 返回数字 或者自定义文字 How To Serialize Enums as JSON Objects with Jackson
    Antd Pro V5 中ProTable 自定义查询参数和返回值
    ES6/Antd 代码阅读记录
    es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?
    Antd Hooks
    使用.Net Core开发WPF App系列教程(其它 、保存控件内容为图片)
    使用.Net Core开发WPF App系列教程( 三、与.Net Framework的区别)
    使用.Net Core开发WPF App系列教程( 四、WPF中的XAML)
    使用.Net Core开发WPF App系列教程( 二、在Visual Studio 2019中创建.Net Core WPF工程)
    使用.Net Core开发WPF App系列教程( 一、.Net Core和WPF介绍)
  • 原文地址:https://www.cnblogs.com/super-admin/p/10156165.html
Copyright © 2011-2022 走看看