您的位置:

Spring Boot + Swagger 3 的使用指南

一、概述

Swagger 是一个开源的 API 设计工具,其主要目的是方便开发者设计、构建、文档化和测试 RESTful API。Swagger 在多个平台上可用,包括 Java、Node.js、JavaScript 等。Swagger 3 是 Swagger 的最新版本,其相比于 Swagger 2 有了很多重大的更新和更新。Spring Boot 是基于 Spring 框架开发的,具有零配置(约定优于配置)的特点,能够快速地创建独立的、产品级的 Spring 应用程序。Spring Boot 与 Swagger 3 完美结合,可以为我们提供更加方便、高效的开发体验,本文将详细介绍 Spring Boot + Swagger 3 的使用指南。

二、安装和配置 Swagger 3

在使用 Swagger 3 前,需要在项目的 pom.xml 文件中添加以下依赖,此处我们使用的是最新版本的 swagger 依赖:

<dependencies>
  <dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
  </dependency>
</dependencies>

接下来,我们需要在 Spring Boot 应用程序中配置 Swagger。对于 Spring Boot,我们需要创建一个配置类,并使用 @Configuration 注释标记它,此外,@EnableSwagger2WebMvc 注解还需要添加,在配置类中,我们还需要配置文档的基本信息和 API 信息:

@Configuration
@EnableSwagger2WebMvc
public class SwaggerConfig {
  @Bean
  public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller"))
            .paths(PathSelectors.any())
            .build()
            .apiInfo(apiInfo());
  }

  private ApiInfo apiInfo() {
    return new ApiInfoBuilder()
            .title("Spring Boot Swagger 3 Demo API")
            .description("Spring Boot Swagger 3 Demo API 文档")
            .version("1.0")
            .build();
  }
}

上述配置代码用以定义我们的 Swagger 文档信息。在这里,我们使用了 Docket API 定义,其中配置了 Spring Boot 应用程序的基类型(.basePackage("com.example.demo.controller")),以便找到需要暴露为 RESTful 的控制器。然后,我们还需要创建一个 apiInfo() 方法,来设置文档的基本信息和 API 信息,可以设置 API 的标题、描述和版本等信息。

三、Swagger 3 注解详解

Swagger 3 中有很多注解,这些注解可以帮助我们更好地组织、描述和文档化 RESTful API。下面,我们来了解一下这些注解,并给出使用代码示例。

1. @Api

该注解用于描述控制器类,可以设置 API 的基本信息,包括其标题、描述、版本等。示例:

@RestController
@Api(tags = "用户管理")
@RequestMapping("/user")
public class UserController {
  //...
}

2. @ApiOperation

该注解用于描述单个方法,可以设置方法的返回值类型、请求方式、请求地址、方法的作用、参数说明等信息。示例:

@ApiOperation(value = "获取用户列表", notes = "所有用户的列表")
@GetMapping("/list")
public List<User> list() {
  //...
}

3. @ApiParam

该注解用于描述方法中的参数,可以设置参数的名称、类型、样例值、是否必填、参数描述等信息。示例:

@ApiImplicitParams({
  @ApiImplicitParam(name = "name", value = "姓名", dataType = "String", paramType = "form", required = true),
  @ApiImplicitParam(name = "age", value = "年龄", dataType = "int", paramType = "form", required = true),
})
@PostMapping("/add")
public void addUser(@RequestParam String name, @RequestParam int age) {
  //...
}

四、Swagger 3 的使用示例

我们以一个简单的 Spring Boot RESTful API 作为例子,来介绍 Swagger 3 的使用。示例代码如下:

1. 项目结构

项目的目录结构示例如下:

  my-project
  ├── src
  │   ├── main
  │   │   ├── java
  │   │   │   └── com.example.demo
  │   │   │       ├── controller // 控制器层
  │   │   │       ├── entity // 实体类
  │   │   │       └── swagger // Swagger 配置
  │   │   └── resources
  │   │       ├── application.properties // 配置文件
  │   │       ├── static
  │   │       └── templates
  │   └── test
  │       └── java
  │           └── com.example.demo
  └── pom.xml // 项目依赖

2. 引入 Swagger 3 依赖

在 pom.xml 文件中,我们需要添加如下依赖:

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
  </dependency>
</dependencies>

3. 配置 Swagger 3

创建 Swagger 配置类 SwaggerConfig.java,如下:

@Configuration
@EnableSwagger2WebMvc
public class SwaggerConfig {
  @Bean
  public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2)
      .select()
      .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller"))
      .paths(PathSelectors.any())
      .build()
      .apiInfo(apiInfo());
  }

  private ApiInfo apiInfo() {
    return new ApiInfoBuilder()
      .title("Spring Boot Swagger 3 Demo API")
      .description("Spring Boot Swagger 3 Demo API 文档")
      .version("1.0")
      .build();
  }
}

4. 编写控制器

新建 UserController.java,如下:

@RestController
@RequestMapping("/user")
@Api(tags = "用户管理")
public class UserController {
  @ApiOperation(value = "获取用户列表", notes = "所有用户的列表")
  @GetMapping("/list")
  public List<User> list() {
    //...
  }

  @ApiOperation(value = "添加用户", notes = "根据 User 对象添加用户")
  @ApiImplicitParam(name = "user", value = "用户信息", dataType = "User", paramType = "body")
  @PostMapping("/add")
  public void addUser(@RequestBody User user) {
    //...
  }

  @ApiOperation(value = "更新用户", notes = "根据 User 对象更新用户")
  @ApiImplicitParam(name = "user", value = "用户信息", dataType = "User", paramType = "body")
  @PutMapping("/update")
  public void updateUser(@RequestBody User user) {
    //...
  }

  @ApiOperation(value = "删除用户", notes = "根据 id 删除用户")
  @ApiImplicitParam(name = "id", value = "用户 ID", dataType = "Long", paramType = "path")
  @DeleteMapping("/{id}")
  public void deleteUser(@PathVariable Long id) {
    //...
  }
}

5. 编写实体类

新建 User.java,如下:

@Data
public class User {
  private Long id;
  private String name;
  private Integer age;
}

6. 运行应用程序

在项目根目录下运行 mvn spring-boot:run 启动应用程序,然后浏览器访问 http://localhost:8080/swagger-ui/ 即可查看接口文档。

总结

本文主要介绍了 Spring Boot 和 Swagger 3 的集成使用,其中包括了 Swagger 3 的注解详解。通过本文的介绍,相信您能够轻松上手并熟练使用 Swagger 3,为我们的 RESTful API 开发带来便利,提高了开发效率。