zoukankan      html  css  js  c++  java
  • 【Swagger2】【2】SpringBoot整合Swagger2

    前言:

    做前后端分离的项目,非常重要的一点就是写好接口文档,用Swagger可以自动同步代码里的注解内容,同时可以直接在页面请求接口。

    使用过程中,也发现了一些缺点,比如不能记录上次请求接口的数据,必须先发布代码才能看到Swagger页面。所以我们已经改用YApi了,YApi的接口可以手写,也可以从Swagger导入,这个属于工具,不属于代码范畴了。不过我们依然在代码里保留了Swagger,因为注解看着挺清晰的

    项目为:SpringBoot + Maven

    正文:

    访问地址:http://localhost:8080/swagger-ui.html 

    配置:

    pom.xml

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.6.1</version>
    </dependency>
    
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.6.1</version>
    </dependency>

    Swagger配置类

    package com.bf;
    
    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.*;
    import springfox.documentation.spi.DocumentationType;
    import springfox.documentation.spi.service.contexts.SecurityContext;
    import springfox.documentation.spring.web.plugins.Docket;
    import springfox.documentation.swagger2.annotations.EnableSwagger2;
    
    
    //用@Configuration注解该类,等价于XML中配置beans;用@Bean标注方法等价于XML中配置bean。
    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
        @Bean
        public Docket baseDocket() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(baseInfo())
                    .groupName("base_api")
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("com.bf.base.web"))
                    .paths(PathSelectors.any())
                    .build()
                    .securitySchemes(securitySchemes())
                    .securityContexts(securityContexts());
        }
    
        @Bean
        public Docket testDocket() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(testInfo())
                    .groupName("test_api")
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("com.bf.test.web"))
                    .paths(PathSelectors.any())
                    .build()
                    .securitySchemes(securitySchemes())
                    .securityContexts(securityContexts());
        }
    
        
        private ApiInfo baseInfo() {
            return new ApiInfoBuilder()
                    .title("基础接口文档")
                    .description("API 描述。。。")
                    .contact(new Contact("微信号", "http://www.test.com", ""))
                    .version("v1.0")
                    .build();
        }
    
        private ApiInfo testInfo() {
            return new ApiInfoBuilder()
                    .title("test是我随便起的名字 接口文档")
                    .description("API 描述。。。")
                    .contact(new Contact("企业号", "http://www.test.com", ""))
                    .version("v1.0")
                    .build();
        }
    }

    Application

    package com.bf;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
    import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
    import tk.mybatis.spring.annotation.MapperScan;
    
    //加上注解@EnableSwagger2 表示开启Swagger
    @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
    @EnableResourceServer
    @MapperScan("com.bf.*.dao")
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    
    }

    使用:

    controller

    @CrossOrigin(origins = "*")
    @RestController
    @Api(tags = {"文章接口"})
    public class ArticleController {
        @ApiOperation(value = "文章详情")
        @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "文章编号", required = true, dataType = "String", paramType = "query"),
        })
        @RequestMapping(value = "article", method = RequestMethod.GET)
        public Result<Article> getArticleInfo(String id) {
            return this.theService.getArticleInfo(id);
        }
    }

    如果传入的参数是用实体类接收的

    package com.bf.dnh.params.xx;
    
    import io.swagger.annotations.ApiModelProperty;
    
    public class AddVo {
        @ApiModelProperty(name="province", value="所在省", required=true)
        private String province;
    
        @ApiModelProperty(name="city", value="所在市", required=true)
        private String city;
    
        public String getProvince() {
            return province;
        }
    
        public void setProvince(String province) {
            this.province = province;
        }
    
        public String getCity() {
            return city;
        }
    
        public void setCity(String city) {
            this.city = city;
        }
    }

    参考博客:

    SpringBoot整合Swagger2 - jtlgb - 博客园
    https://www.cnblogs.com/jtlgb/p/8532433.html

  • 相关阅读:
    接口测试再思考
    Python开发简单爬虫
    正则表达式(Python)
    Git常用方法
    CNN--卷积神经网络从R-CNN到Faster R-CNN的理解(CIFAR10分类代码)
    一看就懂的K近邻算法(KNN),K-D树,并实现手写数字识别!
    我是这样一步步理解--主题模型(Topic Model)、LDA(案例代码)
    你想知道的特征工程,机器学习优化方法都在这了!收藏!
    从似然函数到EM算法(附代码实现)
    一次性弄懂马尔可夫模型、隐马尔可夫模型、马尔可夫网络和条件随机场!(词性标注代码实现)
  • 原文地址:https://www.cnblogs.com/huashengweilong/p/11374932.html
Copyright © 2011-2022 走看看