【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

原文地址:https://www.cnblogs.com/huashengweilong/p/11374932.html