• 【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】表白代码
    有关加密技术的概述,黑客是如何破解加密数据?
    Kali Linux的发展史,专为数字取证和渗透测试而设计
    在Wi-Fi路由器中发现了新的安全漏洞
    太可怕!看看黑客是怎样利用社会工程学窃取你的密码?
    不可不知!未来警惕被黑客植入微芯片
    什么是计算机漏洞,为什么会有漏洞呢?
    揭秘人工智能将如何影响今天的工作
    Linux为程序员添加了行为准则
    不可不知!4种常见的黑客攻击手段
  • 原文地址:https://www.cnblogs.com/huashengweilong/p/11374932.html
Copyright © 2020-2023  润新知