zoukankan      html  css  js  c++  java
  • springboot04-Swagger

    Swagger

    学习目标:

    • 了解Swagger的作用和概念
    • 了解前后端分离
    • 在SpringBoot中集成Swagger

    swagger简介

    • 号称世界上最流行的api框架

    • RestFul API文档在线自动生成工具=》API文档与Api定义同步更新

    • 直接运行,可以在线测试Api接口

    官网:https://swagger.io

    在项目使用Swagger需要springfox

    swagger2

    ui

    SpringBoot集成Swagger

    • 新建一个springBoot——web项目

    • 导入相关依赖

      <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
      <dependency>
          <groupId>io.springfox</groupId>
          <artifactId>springfox-swagger-ui</artifactId>
          <version>2.10.5</version>
      </dependency>
      <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
      <dependency>
          <groupId>io.springfox</groupId>
          <artifactId>springfox-swagger2</artifactId>
          <version>2.10.5</version>
      </dependency>
      
      
    • 编写一个Hello工程

    • 配置Swagger------->Config

      @Configuration
      @EnableSwagger2WebMvc  //开启Swagger2
      public class SwaggerConfig {
      }
      
      
    • 测试运行 http://localhost:8080/swagger-ui.html

    配置swagger

    Swagger的bean实例Docker

    //配置了swagger的Docket的bean实例
        @Bean
        public Docket docket(){
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                   
        }
    
        //配置swagger信息的ApiInfo
        private ApiInfo apiInfo() {
           Contact contact = new Contact("林森", "https://www.cnblogs.com/mjjh/", "1962521583@qq.com");
            return new ApiInfo(
                    "Api Documentation",
                    "Api Documentation",
                    "1.0",
                    "urn:tos",
                    contact, "Apache 2.0",
                    "https://www.cnblogs.com/mjjh/",
                    new ArrayList<VendorExtension>());
    
        }
    
    

    配置扫描接口

     public Docket docket(){
            return new Docket(DocumentationType.SWAGGER_2)      
               .apiInfo(apiInfo())
                    .select()
                     /**
             *RequestHandlerSelectors配置要扫描接口的方式
             basePackage指定扫描包   最常用的
             any()扫描全部
             none()扫描都不扫描
             withClassAnnotation(RestController.class)扫描类上的注解,参数是一个注解的反射对象
             withMethodAnnotation(GetMapping.class)扫描方法上的注解
             */
                    .apis(RequestHandlerSelectors.basePackage("com.mjh.controller"))
                   //paths()过滤扫什么路径
                    .paths(PathSelectors.ant("/mjh/**"))
                    .build();
        }
    

    配置是否启动Swagger

    @Bean
          public Docket docket(){
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .enable(false)  //是否启动Swagger,如果为false,则Swagger不能再浏览器中使用
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("com.mjh.controller"))
                    .build();
        }
    

    只希望我的Swagger在生产环境中使用,在发布的时候不使用?

    • 判断是不是生产环境 flag=false

    • 注入enable(flag)

      application.properties
          spring.profiles.active=dev
      
      application-dev.yml
          server:
        port: 8081
      
      application-pro.yml
          server:
        port: 8082
      
      //配置了swagger的Docket的bean实例
          @Bean
            public Docket docket(Environment environment){
              //设置要显示的Swagger环境
              Profiles profiles=Profiles.of("dev","test");//这里可以配置多个
              //通过environment.acceptsProfiles()判断是否在自己设定的环境当中
              boolean flag = environment.acceptsProfiles(profiles);
      
              return new Docket(DocumentationType.SWAGGER_2)
                      .apiInfo(apiInfo())
                      .enable(flag)
                      .select()
                      .apis(RequestHandlerSelectors.basePackage("com.mjh.controller"))
                      .build();
          }
      
      

      配置Api文档的分组

      .groupName("日志")
      

    如何配置对个分组(多个Docket实例即可)

    @Bean
    public Docket docket1(Environment environment){
    
        return new Docket(DocumentationType.SWAGGER_2).groupName("笔记");
    }
    @Bean
    public Docket docket2(Environment environment){
        return new Docket(DocumentationType.SWAGGER_2).groupName("随笔");
    }
    @Bean
    public Docket docket3(Environment environment){
        return new Docket(DocumentationType.SWAGGER_2).groupName("首页");
    }
    

    实体类配置

    注释就是为了给swagger说明

    //@Api(注释)等价于
    @ApiModel("用户实体类")
    public class User {
        @ApiModelProperty("用户名")
        public String name;
        @ApiModelProperty("电话")
        public String phone;
    }
    
    @RestController
    public class HelloController {
        @GetMapping("/hello")
        public String hello(){
            return "helloo";
        }
    
        /**
         * 只要我们的接口中,返回值中存在实体类,就会被扫描到Swagger中
         * @return
         */
        @PostMapping("/user")
        public User user(){
            return new User();
        }
    
        //ApiOperation接口  放在方法上
        @ApiOperation("Hello控制类")
        @PostMapping("/hello1")
        public String hello1(@ApiParam("用户名") String name){
            return "Hello"+name;
        }
    }
    
    • 我们可以通过Swagger给一些比较难理解的属性或者接口,增加注释信息
    • 接口文档实时更新
    • 可以在线测试

    注意:出于安全考虑,在正式发布的时候要关闭Swagger

  • 相关阅读:
    fedora上部署ASP.NET——(卡带式电脑跑.NET WEB服务器)
    SQL Server 请求失败或服务未及时响应。有关详细信息,请参见事件日志或其它适合的错误日志
    8086CPU的出栈(pop)和入栈(push) 都是以字为单位进行的
    FTP 服务搭建后不能访问问题解决
    指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
    Linux 安装MongoDB 并设置防火墙,使用远程客户端访问
    svn Please execute the 'Cleanup' command. 问题解决
    .net 操作MongoDB 基础
    oracle 使用绑定变量极大的提升性能
    尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。
  • 原文地址:https://www.cnblogs.com/mjjh/p/13280830.html
Copyright © 2011-2022 走看看