swagger

作者: 忒无聊了叭 | 来源:发表于2020-03-27 22:25 被阅读0次

介绍

  • 号称世界上最流行的APi框架;
  • restful Api文档在线自动生成工具 ->APi文档与Api定义同步更新
  • 直接运行,可以在线测试APi接口
  • 支持多种语言

官网:https://swagger.io/

为什么需要Swagger?

前后端分离,大量接口难以理解。可以自动化解决了人力编写接口文档的问题。

运行第一个swagger项目

1、创建springboot项目,导入web模块

2、引入swagger依赖

依赖

<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

3、创建controller层的hello

@Controller
public class Hello {
    @ResponseBody
    @RequestMapping("/hello")
    public String hello(){
        return "Hello World";
    }
}

4、编写配置类(配置全部默认)

@EnableSwagger2 // 开启swagger2
@Configuration //添加到配置里面
public class swaggerConfig {
    }

这时候,我们已经可以使用swagger了。

配置部门swagger页面

@EnableSwagger2 // 开启swagger2
@Configuration //添加到配置里面
public class swaggerConfig {

    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
    }

    private ApiInfo apiInfo() {
        //作者信息
        Contact contact = new Contact("szw", "https://www.baidu.com/", "1277524222@qq.com");

        return new ApiInfo(
                "szw的测试swagger案例",
                "沉下心来慢慢学",
                "1.0",
                "urn:tos",
                contact,//作者信息
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList()
        );
    }
}

配置完成后,我们可以打开http://localhost:8080/swagger-ui.html进行查看。

1585318827459.png

Swagger配置扫描接口

    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2) //配置需要扫描的接口
                .apiInfo(apiInfo())
                .select()
                //RequestHandlerSelectors,配置要扫描接口的方式
                //basePackage ,指定要扫描的包
                //any()扫描全部 none() 不扫描
                //withClassAnnotation:扫描类上的注解,参数是一个注解的反射对象
                //withMethodAnnotation:扫描方法上的注解
                .apis(RequestHandlerSelectors.basePackage("com.swagger.Controller"))
                .paths(PathSelectors.ant("/swagger/**"))
                .build();
    }

自定义配置是否启动

    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2) //配置需要扫描的接口
                .apiInfo(apiInfo())
                .enable(false)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.swagger.Controller"))
                    .paths(PathSelectors.ant("/swagger/**"))
                    .build();
    }

可以根据项目环境自动更改swagger是否启动

 @Bean
    public Docket docket(Environment environment){
        //是指显示swagger的环境
        Profiles profiles = Profiles.of("dev","test");  //括号内可以写一个数组
        boolean flag = environment.acceptsProfiles(profiles);

        return new Docket(DocumentationType.SWAGGER_2) //配置需要扫描的接口
                .apiInfo(apiInfo())
                .enable(flag)   //这里进行判断
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.swagger.Controller"))
                .paths(PathSelectors.ant("/swagger/**"))
                .build();
    }

主配置文件

spring:
  profiles:
    active: dev # 这里进行更改

---
spring:
  profiles: dev
server:
  port: 8081

---
spring:
  profiles: dev2
server:
  port: 8082

配置多个Swagger分组

这里的分组,就是页面的右上角进行选择,这个功能可以很方便的看到一个团队的其他人写的api

@Bean
    public Docket docket2(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("A");
    }

    @Bean
    public Docket docket3(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("B");
    }

Swagger的一些注释注解

@ApiModel("用户类")
public class User {
    @ApiModelProperty("用户名")
    public String userName;
    @ApiModelProperty("密码")
    public String password;
}

    @ApiOperation("作用域注解")
    @GetMapping("/use")
    public String use(){
        return "OK";
    }

@ApiModel(""),这个使用在类上

@ApiModelProperty("")使用在public的属性上

@ApiOperation("")作用域注解

Swagger文档页面进行测试

    @ApiOperation("测试")
    @GetMapping("/use")
    public String use(String userName){
        return "测试"+userName;
    }

测试页面


1585318876685.png

总结

1、我们可以通过Swagger给一些比较难理解的属性和接口,增加注释消息

2、接口文档实时更新

3、可以在线测试

需要注意:在项目发布的时候一定要关闭swagger,出于安全考虑,还可以减少运行的内存。

相关文章

网友评论

      本文标题:swagger

      本文链接:https://www.haomeiwen.com/subject/tsqduhtx.html