zoukankan      html  css  js  c++  java
  • springboot配置swagger信息入门2

    1.配置swaggerConfig

    package com.kuang.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    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;
    
    import java.util.ArrayList;
    
    @Configuration  //表明这个一个配置类
    @EnableSwagger2 //开启Swagger2
    public class SwaggerConfig {
        //配置了 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/LEPENGYANG/p/15642071.html",
                    "319144776@qq.com");
            return new ApiInfo(
                    "洋洋的SwaggerAPI文档",
                    "即使再小的帆也能远航",
                    "v1.0",
                    "https://www.cnblogs.com/LEPENGYANG/p/15642071.html",
                    contact,
                    "Apache 2.0",
                    "http://www.apache.org/licenses/LICENSE-2.0",
                    new ArrayList<>());
        }
    }

    2.swagger配置扫描接口

    RequestHandlerSelectors:配置要扫描接口的方式
    basePackage:指定扫描的包
    any():扫描全部
    none():都不扫描
    withClassAnnotation:扫描类上的注解,参数是一个注解的反射对象
    withMethodAnnotation:扫描方法上的注解
    paths:过滤什么路径

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

    配置是否启动Swagger

    //配置了 Swagger 的 docket 的 bean 实例
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .enable(false) //enable 是否启动Swagger,如果为False,则Swagger 不能在浏览器中访问
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.kuang.controller"))
                .build();
    }

    3.多配置文件

    我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml , 用来指定多个环境版本;

    例如:

    application-test.properties 代表测试环境配置

    application-dev.properties 代表开发环境配置

    但是Springboot并不会直接启动这些配置文件,它默认使用application.properties主配置文件

    我们需要通过一个配置来选择需要激活的环境:

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

    思路:

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

    • 注入enable(flag)

    先准备主配置文件 application.properties

    spring.profiles.active=pro 
    server.port=8080

    application-dev.properties

    server.port=8081

    application-pro.properties

    server.port=8082

    SwaggerConfig配置文件

    //配置了 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) //enable 是否启动Swagger,如果为False,则Swagger 不能在浏览器中访问
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.kuang.controller"))
                .build();
    }

    5.配置API文档的分组

    配置API文档的分组

    .groupName("狂神")

    如何配置多个分组

    @Bean
    public Docket docket1(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("A");
    }
    @Bean
    public Docket docket2(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("B");
    }
    @Bean
    public Docket docket3(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("C");
    }

    6.swagger的实体类配置

    实体类:User

    package com.kuang.pojo;
    
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiModel;
    import io.swagger.annotations.ApiModelProperty;
    
    //@Api("注释")
    @ApiModel("用户实体类")
    public class User {
        @ApiModelProperty("用户名")
        public String username;
        @ApiModelProperty("密码")
        public String password;
    }

    HelloController类

    package com.kuang.controller;
    
    import com.kuang.pojo.User;
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiOperation;
    import io.swagger.annotations.ApiParam;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @Api(tags = "hello控制类")
    @RestController
    public class HelloController {
        @GetMapping(value = "/hello")
        public String hello() {
            return "hello";
        }
    
        //只要我们的接口中,返回值中存在实体类,他就会扫描到Swagger中
        @PostMapping("/user")
        public User user() {
            return new User();
        }
    
        //Operation接口,不是放在类上的,是方法
        @ApiOperation("hello控制类hello2方法")
        @GetMapping(value = "/hello2")
        public String hello2(@ApiParam("用户名") String username) {
            return "hello" + username;
        }
    }

    五个注解:

    Swagger注解简单说明
    @Api(tags = "xxx模块说明") 作用在模块类上
    @ApiOperation("xxx接口说明") 作用在接口方法上
    @ApiModel("xxxPOJO说明") 作用在模型类上:如VO、BO
    @ApiModelProperty(value = "xxx属性说明",hidden = true) 作用在类方法和属性上,hidden设置为true可以隐藏该属性
    @ApiParam("xxx参数说明") 作用在参数、方法和字段上,类似@ApiModelProperty
    @ApiModel("用户实体类"): 实体类注释,放在实体类上面
    @ApiModelProperty("用户名"): 实体类属性注释,放在属性上面
    @Api(tags = "hello控制类"): 放在类上面,范围比较大
    @ApiOperation("hello控制类hello2方法"): 放在接口或者方法上面:参数注释,放在参数前面
    @ApiParam("用户名"):参数注释,放在参数前面

    效果:页面上面会有注释

    总结:

    1. 我们可以通过Swagger给一些比较难理解的属性或者接口,增加注释信息

    2.接口文档实时更新

    3.可以在线测试

  • 相关阅读:
    MQTT的优势
    http与https与tcp区别
    中科芯CKS-MBT30数据采集网关帮助工程师实现PLC远程上下载,减少出差成本
    CKS-MAT30远程程序上下载 支持欧姆龙西门子等PLC 远程下载、监控
    西门子S7以太网通讯协议
    DK云网关与普通DTU之间的区别
    腾讯笔试题
    二叉搜索树
    哈希,链接法解决冲突
    将16进制字符串转化为10进制数输出
  • 原文地址:https://www.cnblogs.com/LEPENGYANG/p/15646147.html
Copyright © 2011-2022 走看看