zoukankan      html  css  js  c++  java
  • springboot集成swagger2(1)

    一、介绍

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

      swagger官网地址:https://swagger.io/

    二、使用

      1.maven依赖

    配置方式一:       
    <!-- knife4j swagger --> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>2.0.2</version> </dependency>

    方式二:
        <dependency>
          <groupId>io.springfox</groupId>
          <artifactId>springfox-swagger2</artifactId>
          <version>2.9.2</version>
      </dependency>
      <dependency>
          <groupId>io.springfox</groupId>
          <artifactId>springfox-swagger-ui</artifactId>
          <version>2.9.2</version>
      </dependency>


    方式三:
        <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>2.9.2</version>
            </dependency> 
            <dependency>
                <groupId>com.github.xiaoymin</groupId>
                <artifactId>swagger-bootstrap-ui</artifactId>
                <version>1.9.0</version>
            </dependency>

      2.配置代码

      2.1方式一 

      

       2.2配置代码

    # swagger
    spring.swagger.enabled=true
    spring.swagger.title=MySwagger2 
    spring.swagger.description=Swagger_test
    spring.swagger.version=v1
    spring.swagger.contactName=MyTest
    package com.config.swagger.properties;
    
    
    import lombok.Data;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    
    /**
     *   @author CMD
     * @ConfigurationProperties : 解释https://www.cnblogs.com/FraserYu/p/11261916.html
     */
    
    @Data
    @ConfigurationProperties("spring.swagger")
    public class SwaggerProperties {
    
        /** 文档页标题 */
        private String title;
    
        /** 描述 */
        private String description;
    
        /** 版本号 */
        private String version;
    
        /** 条款地址(不可见),公司内部使用的话不需要配 */
        private String termsOfServiceUrl;
    
        /** 联系人名字 */
        private String contactName;
    
        /** 联系人网址 */
        private String contactUrl;
    
        /** 联系人邮箱 */
        private String contactEmail;
    }
    package com.config.swagger;
    
    import com.config.swagger.properties.SwaggerProperties;
    import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
    import io.swagger.annotations.Api;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
    import org.springframework.boot.context.properties.EnableConfigurationProperties;
    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;
    
    
    /**
     * @author CMD
     * @EnableSwagger2  使用swagger2构建restful接口测试
     * @EnableKnife4j   swagger升级版,ui更加丰富
     * @EnableConfigurationProperties的作用: 使@ConfigurationProperties 注解的类生效   https://blog.csdn.net/zhlin110228323/article/details/104351639
     * @ConditionalOnProperty   https://www.cnblogs.com/secbro/p/12011522.html
     */
    @Slf4j
    @EnableSwagger2
    @EnableKnife4j
    @Configuration
    @EnableConfigurationProperties({SwaggerProperties.class})
    @ConditionalOnProperty(prefix = "spring.swagger", name = {"enabled"}, havingValue = "true")
    public class SwaggerConfiguration {
    
    
        /**
         *  创建API的基本信息(这些基本信息会展现在文档页面中)
         *  访问地址:http://项目实际地址/swagger-ui.html
         * @param swaggerProperties
         * @return
         */
        private ApiInfo apiInfo(SwaggerProperties swaggerProperties){
    
            ApiInfo build = new ApiInfoBuilder()
                    .title(swaggerProperties.getTitle())                                //api标题
                    .description(swaggerProperties.getDescription())                    //api描述
                    .termsOfServiceUrl(swaggerProperties.getTermsOfServiceUrl())
                    .contact(new Contact(swaggerProperties.getContactName(), swaggerProperties.getContactUrl(), swaggerProperties.getContactEmail()))  //本API负责人的联系信息
                    .version(swaggerProperties.getVersion())                            //版本号
                    .build();
            return build;
        }
    
        /**
         *  创建Api应用
         *      apiInfo()  增加API相关信息
         *      通过select()函数返回一个ApiSelectorBuilder实例,用来控制那些接口暴露给swagger来展示
         *      可以使用指定扫描的包路径来定义指定要建立API的目录或者扫描注解的方式
         * @param swaggerProperties
         * @return
         */
        @Bean
        public Docket configure(SwaggerProperties swaggerProperties){
            Docket build = new Docket(DocumentationType.SWAGGER_2)                                      //文档类型(swagger2)
                    .pathMapping("/")
                    .apiInfo(this.apiInfo(swaggerProperties))                      //设置包含在json ResourceListing响应中的api元信息
                    .select()                                                      //启动用于api选择的构建器
                    .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))  // 扫描注解  或者扫描包(RequestHandlerSelectors.basePackage("com.pjb.controller"))
                    .paths(PathSelectors.any())                                    //路径过滤器(扫描所有路径)
                    .build();
    
            return build;
        }
    }

      2.3 接口配置

      常用注解:

    注解 使用地方 用途
    @Api 类/接口 描述类/接口主要用途  
    @ApiOperation 方法 描述方法的用途
    @ApiImplicitParam 方法 用于描述接口的非对象参数
    @ApiImplicitParams 方法 用于描述接口的非对象参数集
    @ApiIgnore 类/方法/参数 Swagger 文档不会显示拥有该注解的接口
    @ApiModel 参数实体类 可设置接口相关实体的描述
    @ApiModelProperty 参数实体类属性 可设置实体属性的相关描述

      实体类:

    package com.model;
    
    import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
    import io.swagger.annotations.ApiModel;
    import io.swagger.annotations.ApiModelProperty;
    import lombok.Builder;
    import lombok.Data;
    
    
    /**
     *
     *  @JsonIgnoreProperties(ignoreUnknown = true) 防止值转化数量对不上报错
     *  @JsonInclude(JsonInclude.Include.NON_NULL)   为null的字段不显示
     * @author cmd
     */
    @ApiModel
    @Builder
    @JsonIgnoreProperties(ignoreUnknown = true)
    @Data
    public class User {
    
        @ApiModelProperty(value = "用户id")
        private   String  id;
    
        @ApiModelProperty(value = "用户姓名")
        private   String   name;
    
        @ApiModelProperty(value = "用户年龄")
        private   Integer  age;
    
    
    }

      接口:

    package com.controller;
    
    import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
    import com.model.User;
    import com.wanda.framework.api.dto.response.ResultDTO;
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiOperation;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.http.MediaType;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @author cmd
     */
    @Slf4j
    @RestController
    @Api(tags = "测试相关")
    public class LogTestController {
    
        @ApiOperation(value = "测试用户请求")
        @ApiOperationSupport(order = 1)
        @RequestMapping(value = "/test/add",method = RequestMethod.GET,produces= MediaType.APPLICATION_JSON_UTF8_VALUE)
        public ResultDTO<User> getString(){
            User  user = User.builder()
                    .id("20")
                    .name("小明")
                    .age(30).build();
            return ResultDTO.ok(user);
        }
    
    
    }

      访问地址:

        http://localhost:9089/doc.html

      最终结果:

       可能会出现的异常:

        

       解决方式:查看在配置文件中是否存在  且结果为true。

         参看文档:https://www.jianshu.com/p/002ce2f26103

            https://blog.csdn.net/weixin_43333483/article/details/98958370

            https://www.cnblogs.com/progor/p/13297904.html#swagger%E7%9A%84%E4%BB%8B%E7%BB%8D

            https://segmentfault.com/a/1190000019992760

            

            

            

      

        

      

    kafka rabbitMq
  • 相关阅读:
    Assetbundle资源单一打包,以及加载方法
    VS2010 Chromium编译
    一道思考题
    Windbg源码调试
    C++ static_cast dynamic_cast reinterpret_cast const_cast转换
    条件断点设置
    FFmpeg 2.0编译配置
    error LNK2001: 无法解析的外部符号 _IID_IDirectDraw7
    Windbg常用命令
    DDraw绘图
  • 原文地址:https://www.cnblogs.com/stt101517/p/14308517.html
Copyright © 2011-2022 走看看