SpringBoot-Swagger

SpringBoot-Swagger

在这里插入图片描述

简介

  • 号称世界上最流行的API框架
  • RestFul API文档在线生成工具=>API文档与API同步更新【直接通过代码生成文档】
  • 可以直接运行,可以在线测试API接口【支持在线测试】
  • 支持多种语言:(Java,PHP…)

SpringBoot集成Swagger

  1. 新建一个SpringBoot(web)项目
  2. 导入相关依赖
<!-- springfox-swagger2 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <!-- springfox-swagger-ui -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
  1. 先设置一个HelloController
@RestController
public class HelloController {
    
    

    @RequestMapping("/hello")
    public String hello(){
    
    
        return "hello";
    }
}

看看能不能跳转
4. 开启SwaggerConfig

@Configuration
@EnableSwagger2   //开启Swagger2
public class SwaggerConfig {
    
    

}
  1. 测试运行
    –部分内容选自狂神说JAVA

配置Swagger信息

  1. 先配置Swagger的Docket的bean实例【通过看源码得知这里应该要放什么值】
    @Bean
    public Docket docket(){
    
    
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo());
    }
  1. 配置Swagger信息=apiInfo
    private ApiInfo apiInfo(){
    
    
        //作者信息
        Contact contact = new Contact("lqc", "http://lqc.com", "[email protected]");
        return new ApiInfo(
                "lqc的SwaggerAPI文档",
                "做好此时此刻",
                "1.0",
                "http://lqc.com",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList<VendorExtension>());
    }

Swagger配置扫描接口

1.自定义扫描接口使用基于Docket.select
Required: springfox.documentation.spring.web.plugins.Docket public
Found: springfox.documentation.spring.web.plugins.ApiSelectorBuilder select()
由此可见,它需要一个build方法
但是build的什么呢,可见可以build apis和paths
此处使用Apis,它又告诉你它需要使用RequestHandlerSelectors【配置要扫描接口的方式】于是有了以下代码:

    @Bean
    public Docket docket(){
    
    
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //RequestHandlerSelectors 配置要扫描接口的方式
                .apis(RequestHandlerSelectors.basePackage("com.kuang.swagger.controller"))
                .build();
    }

此处只允许扫描该接口
进入源码看发现除了basePackage指定扫描包还有很多方法

    @Bean
    public Docket docket(){
    
    
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //RequestHandlerSelectors 配置要扫描接口的方式
                //basePackage:指定要扫描的包
                //withClassAnnotation:扫描类上的注解
                //withMethodAnnotation:扫描方法上的注解
                .apis(RequestHandlerSelectors.basePackage("com.kuang.swagger.controller"))
                //paths():过滤什么路径.
                .paths(PathSelectors.ant("/kuang/**"))//只扫描这个路径下的接口
                .build();
    }
  1. 配置是否启动Swagger
    问题:我们只希望我们的Swagger在生产环境中使用,在发布的时候不使用
    2.1先设置了了配置文件,代表不同环境,并设置本机使用环境
    在这里插入图片描述
    2.2.SwaggerConfig
 @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就启用不了,反之就可以}

配置API文档分组

配置API文档的分组

.groupName("小可爱")

如何配置多个分组,多个Docket实例即可

    @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");
    }

关于API接口注释

@ApiModel:类
@ApiModelProperty:属性
@ApiOperation:方法
@ApiParam:参数
示例:
实体类配置

//@Api(注释)
@ApiModel("用户实体类")
public class User {
    
    
    @ApiModelProperty("用户名")
    public String username;
    @ApiModelProperty("密码")
    public String password;
}

controller

//Operation接口,不是放在类上的,是方法
    @ApiOperation("Hello控制类")
    @GetMapping(value="/hello2")
    public String hello2(@ApiParam("用户名") String username){
    
    
        return "hello"+username;
    }

API实体类信息

controller

//只要在我们的接口中,返回值中存在实体类,他就会被扫描到Swagger中
    @PostMapping(value = "/user")
    public User user(){
    
    
        return new User();
    }

总结:

  1. 我们可以通过Swagger给一些比较难理解的属性或者接口,增加注释信息
  2. 接口文档实时更新
  3. 可以在线测试

Swagger是一个优秀的工具,几乎所有大公司都有使用它
【注意点】在正式发布的时候,关闭Swagger! !!出于安全考虑。而且节省运行的内存;

–大部分内容来自狂神说JAVA

猜你喜欢

转载自blog.csdn.net/qq_55293923/article/details/124280022