【Java】Swagger(文档交互)

一、介绍SpringBoot集成

学习模板:

  • 了解Swagger的作用和概念
  • 了解前后端分离
  • 在SpringBoot中集成swagger

Swagger简介

前后端分离

Vue + SpringBoot

后端时代:前端只用管理静态页面;html由后端做。

前后端分离时代:

  • 后端:控制层、服务层、数据访问层
  • 前端:前端控制层、视图层
    • 位置后端数据,json。已经存在了,不需要后端,前端工程依旧能够跑起来
  • 前后端如何交互?通过API
  • 前后端相对独立,松耦合
  • 前后端甚至可以部署在不同的服务器上

产生一个问题:

  • 前后端集成联调,前后端人员和后端任务无法做到,即使协商,尽早解决,最终导致问题集中爆发;

解决方案:

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

Swagger

在项目中使用Swagger,需要导入springbox包,其中包含以下组件

  • swagger2
  • ui

SpirngBoot集成Swagger

  1. 新建springBoot web项目

  2. 寻找依赖

在这里插入图片描述

  1. 在pom.xml中导入两个依赖

    <!-- 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>
    
  2. 编写一个Hello工程

    • 在主程序同级包下创建controller包,并在包里创建HelloController类

      @RestController
      public class HelloController {
          
          @RequestMapping("/hello")
          public String hello(){
              return "hello";
          }
      }
      
  3. 开启swagger

    • 在主程序同级包下创建config包,并在包里创建SwaggerConfig类

      @Configuration
      @EnableSwagger2 //开启Swagger 2
      public class SwaggerConfig {
          
      }
      
  4. 测试:

    • 访问:http://localhost:8080/swagger-ui.html 效果如下

在这里插入图片描述

二、配置Swagger信息

Swagger的bean实列Docket;

编写SwaggerConfig类

@Configuration
@EnableSwagger2 //开启Swagger 2
public class SwaggerConfig {

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

    //配置Swagger信息=apiInfo
    private ApiInfo apiInfo(){
        //作者信息
        Contact contact = new Contact("吴之谦","http://wuxiuxiang.ysepan.com/","734338421@qq.com");

        return new ApiInfo(
                "我的SwaggerAPI文档",
                "这里写描述",
                "v1.0",
                "http://wuxiuxiang.ysepan.com/",
                contact,
                "Apache 2.0",
                "http://shiguiyuan.ysepan.com/",
                new ArrayList()

        );
    }

}

刷新页面,效果如下

在这里插入图片描述

三、配置扫描接口及开关

下面是swagger扫描到本项目的请求接口

在这里插入图片描述

假设我们执行扫描我们自己指定包的接口,可以在配置类中这样写

SwaggerConfig.class

@Configuration
@EnableSwagger2 //开启Swagger 2
public class SwaggerConfig {

    //配置Swagger的Docket的bean实例
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //指定扫描包,RequestHandlerSelectors 配置要扫描接口的方式,这里选择的是扫描包的方式
                .apis(RequestHandlerSelectors.basePackage("com.kuang.swagger.controller"))
                .build();//工程模式
    }
省略..........

可选的扫描方式:

  1. basePackage():扫描包
  2. any():扫描全部
  3. none():都不扫描
  4. withClassAnnotation():扫描类上的注解的接口
  5. withMethodAnnotation() : 扫描方法上的注解的接口

过滤扫描

SwaggerConfig的docket()方法修改

    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.kuang.swagger.controller"))
                //paths()过滤,过滤/kuang/**下面的接口
                .paths(PathSelectors.ant("/kuang/**"))
                .build();
    }

可选方式:

  1. any():过滤全部

  2. none():都不过滤

Swagger启用/禁用

enable()方法的参数为true为启用,参数为false(默认)则为禁用

    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .enable(false)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.kuang.swagger.controller"))
                .build();
    }

刷新页面后的效果

在这里插入图片描述

题目:我只希望Swa在生产环境中使用,在发布的时候不使用

  • 判断是否是生产环境 flag
  • 注入enable()

先准备两份配置文件,分别为开发环境和生产环境

在这里插入图片描述

application.properties

#激活开发环境的配置文件
spring.profiles.active=dev

application-dev.properties

#设置端口号
server.port=8081

application-pro.properties

#设置端口号
server.port=8082

Swagger配置类

@Configuration
@EnableSwagger2 //开启Swagger 2
public class SwaggerConfig {

    //配置Swagger的Docket的bean实例
    @Bean
    public Docket docket(Environment environment){
        
        //设置要显示的Swagger环境(这里比对的是dev和test,都没比对上则返回false)
        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.kuang.swagger.controller"))
                .build();
    }
//以下配置信息省略.........

}

注意:测试的时候记得填写对应环境的端口号

四、分组和接口注释及小结

配置API文档的分组

使用groupName( )方法

    @Bean
    public Docket docket(Environment environment){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .groupName("狂神")
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.kuang.swagger.controller"))
                .build();
    }

效果如下

在这里插入图片描述

如何配置多个分组?

在swagger配置文件中配置多个实例

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @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");
    }


    @Bean
    public Docket docket(Environment environment){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .groupName("狂神")
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.kuang.swagger.controller"))
                .build();
    }

//以下代码省略。。。。。

实现效果:

在这里插入图片描述

实体类配置

User实体类

@ApiModel("用户实体类") //页面的标注信息
public class User {
    @ApiModelProperty("用户名") //字段的标注信息
    public String username;
    @ApiModelProperty("密码")//字段的标注信息
    public String password;
}

效果

在这里插入图片描述

controller类配置

@RestController
public class HelloController {


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

    @ApiOperation("Hello2请求接口")   //方法注解
    @RequestMapping("/hello")
    public String hello2(@ApiParam String username){  //参数注解
        return "hello"+username;
    }

   
    @PostMapping(value = "/user")
    public User user(){
        return new User();
    }
}

  • @ApiOperation(“Hello2请求接口”) //方法注解
  • @ApiParam //参数注解

接口测试

在这里插入图片描述

传参测试

在这里插入图片描述

测试效果

在这里插入图片描述

总结

  • 我们可以通过swagger给以下比较难理解的属性或者接口,增加注释信息
  • 接口文档实时更新
  • 可以在线测试

【注意点】

正式发布的时候,关闭Swagger!!!出于安全考虑,而且节省运行内存;

Java中使用Swagger可以通过以下步骤来实现: 1. 在你的Maven或Gradle项目中添加Swagger的依赖项。例如,对于Maven项目,可以在`pom.xml`文件中添加以下内容: ```xml <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency> ``` 2. 创建一个配置类来启用Swagger。在该类上使用`@EnableSwagger2`注解,如下所示: ```java import org.springframework.context.annotation.Configuration; import springfox.documentation.swagger2.annotations.EnableSwagger2; @Configuration @EnableSwagger2 public class SwaggerConfig { } ``` 3. 创建一个API控制器类,并使用Swagger的注解来描述API接口。例如: ```java import org.springframework.web.bind.annotation.*; import io.swagger.annotations.*; @RestController @RequestMapping("/api") @Api(tags = "示例API") public class SampleController { @GetMapping("/hello") @ApiOperation("获取欢迎信息") public String hello() { return "Hello, Swagger!"; } @PostMapping("/user") @ApiOperation("创建用户") public User createUser(@RequestBody User user) { // 处理创建用户的逻辑 return user; } // 其他API接口... } ``` 4. 启动你的应用程序,并访问Swagger UI界面。Swagger UI界面默认可以通过`http://localhost:8080/swagger-ui.html`进行访问。你将能够看到由Swagger自动生成的API文档,并可以在界面上进行交互测试和调试。 请注意,上述示例中使用了Spring BootSpringfox Swagger来演示使用Swagger的过程。你可以根据你的项目框架和需要进行相应的调整。另外,还可以通过注解来进一步定制API文档的展示效果和描述信息。 希望这些步骤能够帮助你在Java项目中成功使用Swagger
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值