Swagger简述以及集成SpringBoot。【狂神】

1. Swagger简介

后端时代 :

  • 前端只能管理静态页面;html==> 后端。模版引擎 JSP ==> 后端 是主力

前后端分离时代:

目前较为流行的框架是 Vue + SpringBoot

  • 前端 -> 前端控制层、视图层
  • 后端 -> 后端控制层、服务层、数据访问层
  • 前后端通过API进行交互
  • 前后端相对独立且松耦合
    • 伪造前端数据,json 没有后端前端也是可以跑起来的

前后端如何交互 ==> API

  • 前后端相对独立 ,松耦合;

  • 前后端甚至可以部署在不同的服务器上;

但是会产生一个问题 :

  • 前后端集合联调,前端人员和后端人员无法做到及时的沟通协商

解决方法:

  • 首先制定schema【计划的提纲】 , 实时的更新最新API,降低集成的风险
  • 早些年:制定word计划文档;
  • 前后端分离:
    • 前端测试后端接口;postman
    • 后端提供接口,需要实时更新最新的消息及改

于是为了解决这些文写问题就出现了我们的Swagger~~~

Swagger

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

官方文档 :
https://swagger.io/

SpringBoot集成swagger

1. 新建项目(springboot-web)

1.选择web依赖即可

o1OY0x.jpg

2.导入相关依赖

在项目中使用Swagger 需要springfox,两个jar包;

  • Springfox-swagger2

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

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

3.编写HelloController 并测试是否成功

o1XvIf.jpg

@RestController
public class HelloController {


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

经测试么的问题

2.配置Swagger

o1XvIf.jpg

@Configuration
@EnableSwagger2      //开启swagger2 注意是 222222!!!!
public class SwaggerConfig {

}

3. 测试运行:

这时候测试运行我发现出现了下面这个错误!!!

o3Fx2t.png
0S boot. Springapplication Application run failed

springboot跑不起来了

解决方法 :在查阅了许多资料之后发现 我写的没问题。 是版本问题,将springboot降级到2.5.2 发现 成功了 。。。。。

访问测试 :http://localhost:8080/swagger-ui.html ,

可以看到swagger的界面;

o3u7rR.png

配置Swagger

Swagger 的bean实例Docket

ps 。 看源码找方法比较快乐一些~~~~

通过apiInfo()属性配置文档信息

@Configuration
@EnableSwagger2      //开启swagger2 注意是 222222!!!!
public class SwaggerConfig {

    //配置swagger的Docket 的 bean实例
    @Bean
    public Docket docket() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo());
    }

    //配置swagger的配置信息 apiInfo
    private ApiInfo apiInfo() {


       String contact = "zhen";
        return new ApiInfo(
                "甄的Swagger日记",
                "嘿嘿嘿是我写的o",
                "1.0",
                "urn:tos",
                contact,
                "1111",
                "http://www.apache.org/licenses/LICENSE-2.0"
        );

    }
}

运行测试 发现seagger里的[o3u7rR.png页面换了 成功~~~

Swagger配置扫描接口

1、构建Docket时通过select()方法配置怎么扫描接口。

 //配置swagger的Docket 的 bean实例
    @Bean
    public Docket docket() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()           // 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
                //RequestHandlerSelectors配置要扫描接口的方式
                //basePackage指定要扫描的包
                //ang 扫描任意包
                .apis(RequestHandlerSelectors.basePackage("com.zhen.controller"))
    }

2.还可以配置接口扫描过滤:

 //配置swagger的Docket 的 bean实例
    @Bean
    public Docket docket() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()           // 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
                //RequestHandlerSelectors配置要扫描接口的方式
                //basePackage指定要扫描的包
                //ang 扫描任意包
                .apis(RequestHandlerSelectors.basePackage("com.zhen.controller"))
                //path 过滤路径
                .paths(PathSelectors.ant("/zhen/**"))
                .build();
    }

3.配置Swagger开关

  • 通过enable()方法配置是否启用swagger,如果是false,swagger将不能在浏览器中访问了

      @Bean
        public Docket docket() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .enable(false)    //关闭
                    .select()           // 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
                    //RequestHandlerSelectors配置要扫描接口的方式
                    //basePackage指定要扫描的包
                    //ang 扫描任意包
                    .apis(RequestHandlerSelectors.basePackage("com.zhen.controller"))
                    //path 过滤路径
                    //.paths(PathSelectors.ant("/zhen/**"))
                    .build();
        }
    
    

    测试 : 确实无法访问了

    o8tj6P.jpg

**我只希望我的Swagger在生产环境中使用,在发布时不使用**

  • 判断是不是生产环境

  • 再通过enable判断

     //配置swagger的Docket 的 bean实例
        @Bean
        public Docket docket(Environment environment) {
    
            // 设置要显示swagger的环境
            Profiles of = Profiles.of("dev", "test");
            // 判断当前是否处于该环境
            // 通过 enable() 接收此参数判断是否要显示
            boolean b = environment.acceptsProfiles(of);
            
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .enable(false)    //是否启用swagger
                    .select()           // 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
                    //RequestHandlerSelectors配置要扫描接口的方式
                    //basePackage指定要扫描的包
                    //ang 扫描任意包
                    .apis(RequestHandlerSelectors.basePackage("com.zhen.controller"))
                    //path 过滤路径
                    //.paths(PathSelectors.ant("/zhen/**"))
                    .build();
        }
    
    

配置Api文件分组

  •                 .groupName("zhen")
    
  • 一个docker能返回一个组 配置多个分组只需要配置多个docket即可

    @Bean
    public Docket docket1(){
       return new Docket(DocumentationType.SWAGGER_2).groupName("group1");
    }
    @Bean
    public Docket docket2(){
       return new Docket(DocumentationType.SWAGGER_2).groupName("group2");
    }
    @Bean
    public Docket docket3(){
       return new Docket(DocumentationType.SWAGGER_2).groupName("group3");
    }
    
实体类配置
  • 新建实体类

    @ApiModel("用户实体")
    public class User {
        @ApiModelProperty("用户名")
        public String username;
        @ApiModelProperty("密码")
        public String password;
    }
    
  • 编写controller

     @RequestMapping("/getUser")
        public User getUser(){
            return new User();
        }
    

    ps.

    • @ApiModel为类添加注释

    • @ApiModelProperty为类属性添加注释

  • 常用注释

    Swagger注解简单说明
    @Api(tags = “xxx模块说明”)作用在模块类上
    @ApiOperation(“xxx接口说明”)作用在接口方法上
    @ApiModel(“xxxPOJO说明”)作用在模型类上:如VO、BO
    @ApiModelProperty(value = “xxx属性说明”,hidden = true)作用在类方法和属性上,hidden设置为true可以隐藏该属性
    @ApiParam(“xxx参数说明”)作用在参数、方法和字段上,类似@ApiModelProperty
  • 给请求的接口配置一些注释

     @ApiOperation("Zhen的接口")
        @PostMapping("/zhen")
        @ResponseBody
        public String zhen(@ApiParam("用户名 : ")String username){
            return username;
        }
    

【注意点】

在正式发布的时候,记得关闭Swagger!!! 为了安全和节省内存~~·

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值