SpringBoot集成Swagger2构建可视化API文档的完整步骤

 更新时间:2025年07月18日 10:47:59   作者:越来越无动于衷  
在前后端分离开发中,API文档是连接前后端的重要桥梁,Swagger作为一款强大的API文档工具,能自动生成交互式API文档,极大提升开发效率,本文将详细介绍SpringBoot项目集成Swagger2的完整步骤,包含配置细节、常见问题及解决方案,需要的朋友可以参考下

一、Swagger 简介

Swagger 是一套用于生成、描述和调用 RESTful API 的规范和工具,主要优势包括:

  • 自动生成文档:无需手动编写,通过代码注解自动生成 API 文档。
  • 交互式调试:支持在线测试 API 接口,无需依赖 Postman 等工具。
  • 版本管理:方便 API 版本迭代和维护。
  • 团队协作:前后端开发者可基于同一套文档协作,减少沟通成本。

二、环境准备

基础环境

  • JDK:17 及以上(本文基于 Spring Boot 3.x,需兼容 Java 17+)
  • Spring Boot 版本:3.5.3(其他 2.6+ 版本可参考,注意版本兼容)
  • 开发工具:IntelliJ IDEA
  • 依赖管理:Maven

三、集成步骤

1. 添加 Swagger2 依赖

在 pom.xml 中添加 Swagger2 核心依赖(springfox-swagger2 和 springfox-swagger-ui):

<!-- Swagger2 核心依赖 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<!-- Swagger2 可视化界面 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

注意:Spring Boot 2.6+ 及 3.x 版本与 Swagger2(2.9.2)存在一定兼容性问题,需通过后续配置解决(见步骤 3)。

 如果不成功可以

2. 配置 Swagger 核心类

创建 SwaggerConfig 配置类,用于自定义 Swagger 文档信息、扫描规则等:

package com.qcby.springboot.config;
 
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
@Configuration // 标识为配置类
@EnableSwagger2 // 启用 Swagger2
public class SwaggerConfig implements WebMvcConfigurer {
 
    /**
     * 配置 Swagger 核心对象 Docket
     */
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2) // 指定 Swagger 版本为 2.x
                .apiInfo(apiInfo()) // 配置 API 文档基本信息
                .select()
                // 配置接口扫描规则:只扫描带有 @ApiOperation 注解的方法
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                .paths(PathSelectors.any()) // 匹配所有路径
                .build()
                .enable(true); // 是否启用 Swagger(生产环境可设为 false 关闭)
    }
 
    /**
     * 配置 API 文档页面信息(标题、描述、版本等)
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Spring Boot API 文档") // 文档标题
                .description("接口文档详情:包含用户管理、数据查询等接口") // 文档描述
                .version("1.0.0") // 接口版本
                .contact(new Contact("开发者", "https://xxx.com", "xxx@example.com")) // 联系人信息
                .license("Apache 2.0") // 许可协议
                .licenseUrl("https://www.apache.org/licenses/LICENSE-2.0") // 许可协议链接
                .build();
    }
 
    /**
     * 配置静态资源映射(解决 Swagger UI 页面无法访问问题)
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 映射 Swagger UI 静态资源
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        // 映射 webjars 静态资源(Swagger UI 依赖的前端资源)
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
        // 映射项目自定义静态资源(如需要)
        registry.addResourceHandler("/**")
                .addResourceLocations("classpath:/static/");
    }
}

3. 解决 Spring Boot 版本兼容问题

Spring Boot 2.6+ 及 3.x 版本默认使用 PathPatternParser 作为路径匹配策略,与 Swagger2 存在冲突,需手动切换为 AntPathMatcher

在 application.yml 中添加配置:

spring:
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher # 切换为 Ant 风格路径匹配器

4. 编写 API 接口并添加 Swagger 注解

在 Controller 中使用 Swagger 注解描述接口,生成更详细的文档:

package com.qcby.springboot.controller;
 
import com.qcby.springboot.entity.Person;
import com.qcby.springboot.service.PersonService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
 
import java.util.List;
 
@Api(tags = "人员管理接口") // 描述类的作用
@Controller
@RequestMapping("/person")
public class PersonController {
 
    @Autowired
    private PersonService personService;
 
    @ApiOperation(value = "查询所有人员", notes = "获取数据库中所有人员信息列表") // 描述方法作用
    @RequestMapping("/findAll")
    @ResponseBody
    public List<Person> findAll() {
        return personService.findAll();
    }
 
    @ApiOperation(value = "添加人员", notes = "根据传入的人员信息新增一条记录")
    @RequestMapping("/insert")
    @ResponseBody
    public String insert(
            @ApiParam(name = "person", value = "人员实体对象", required = true) // 描述参数
            Person person) {
        int result = personService.insert(person);
        return result > 0 ? "插入成功" : "插入失败";
    }
 
    @ApiOperation(value = "删除人员", notes = "根据 ID 删除指定人员记录")
    @RequestMapping("/delete")
    @ResponseBody
    public String delete(
            @ApiParam(name = "id", value = "人员 ID", required = true, example = "1")
            Integer id) {
        int result = personService.delete(id);
        return result > 0 ? "删除成功" : "删除失败";
    }
}

常用 Swagger 注解说明:

  • @Api(tags = "..."):描述类 / 控制器的作用。
  • @ApiOperation(value = "...", notes = "..."):描述方法的作用(value 为简短说明,notes 为详细描述)。
  • @ApiParam(...):描述方法参数(名称、说明、是否必填、示例值等)。
  • @ApiModel(...):描述实体类(如 Person)。
  • @ApiModelProperty(...):描述实体类字段(如 Person 的 nameage 字段)。

5. 访问 Swagger UI 文档

启动 Spring Boot 项目,访问以下地址:
http://localhost:8080/swagger-ui.html

成功访问后,将看到如下界面:

  • 左侧:接口列表(按 Controller 分组)。
  • 右侧:接口详情(请求参数、响应示例、测试按钮等)。

可直接在页面上输入参数,点击「Try it out」测试接口,无需额外工具。

四、常见问题及解决方案

1. 访问 swagger-ui.html 出现 404 错误

  • 原因 1:静态资源映射未配置或错误。
    解决:检查 SwaggerConfig 中的 addResourceHandlers 方法,确保路径映射正确。
  • 原因 2:Spring Boot 版本与 Swagger2 不兼容。
    解决:确认 mvc.pathmatch.matching-strategy 已设置为 ant_path_matcher
  • 原因 3:依赖缺失或版本冲突。
    解决:检查 pom.xml 中 springfox-swagger2 和 springfox-swagger-ui 版本是否一致(推荐 2.9.2)。

2. 接口未在 Swagger 文档中显示

  • 原因 1Docket 配置的扫描规则过滤了接口。
    解决:修改 apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) 为 apis(RequestHandlerSelectors.basePackage("com.qcby.springboot.controller"))(扫描指定包下的所有接口)。
  • 原因 2:接口未添加 @ApiOperation 注解。
    解决:在需要显示的方法上添加 @ApiOperation 注解。

3. Spring Boot 3.x 兼容问题

Swagger2(springfox)对 Spring Boot 3.x 支持有限,推荐使用 OpenAPI 3.0 替代方案(springdoc-openapi):

<!-- 替代 Swagger2 的 OpenAPI 3.0 依赖 -->
<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.2.0</version>
</dependency>

以上就是SpringBoot集合Swagger2构建可视化API文档的完整步骤的详细内容,更多关于SpringBoot Swagger2可视化API文档的资料请关注脚本之家其它相关文章!

相关文章

  • Java毕业设计实战之食品溯源系统的实现

    Java毕业设计实战之食品溯源系统的实现

    这是一个使用了java+Springboot+Maven+mybatis+Vue+mysql+wd开发的食品溯源系统,是一个毕业设计的实战练习,具有食品溯源该有的所有功能,感兴趣的朋友快来看看吧
    2022-01-01
  • Java框架学习Struts2复选框实例代码

    Java框架学习Struts2复选框实例代码

    这篇文章主要介绍了Java框架学习Struts2复选框实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • Java中的CGLIB动态代理的使用及原理详解

    Java中的CGLIB动态代理的使用及原理详解

    这篇文章主要介绍了Java中的CGLIB动态代理的使用及原理详解,CGLIB是一个功能强大,高性能的代码生成包,它为没有实现接口的类提供代理,为JDK的动态代理提供了很好的补充,需要的朋友可以参考下
    2023-09-09
  • Java实现布隆过滤器的示例详解

    Java实现布隆过滤器的示例详解

    布隆过滤器(Bloom Filter)是1970年由布隆提出来的,实际上是由一个很长的二进制数组+一系列hash算法映射函数,用于判断一个元素是否存在于集合中。本文主要介绍了Java实现布隆过滤器的示例代码,希望对大家有所帮助
    2023-03-03
  • logback使用MDCFilter日志过滤源码解读

    logback使用MDCFilter日志过滤源码解读

    这篇文章主要介绍了logback使用MDCFilter日志过滤源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • java 使用idea将工程打成jar并创建成exe文件类型执行的方法详解

    java 使用idea将工程打成jar并创建成exe文件类型执行的方法详解

    这篇文章主要介绍了java 使用idea将工程打成jar并创建成exe文件类型执行,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-09-09
  • Java中的延迟队列DelayQueue源码解析

    Java中的延迟队列DelayQueue源码解析

    这篇文章主要介绍了Java中的延迟队列DelayQueue源码解析,DelayQueue是一个支持并发的无界延迟队列,队列中的每个元素都有个预定时间,当线程从队列获取元素时,只有到期元素才会出队列,没有到期元素则阻塞等待,需要的朋友可以参考下
    2023-12-12
  • Mybatis之映射实体类中不区分大小写的解决

    Mybatis之映射实体类中不区分大小写的解决

    这篇文章主要介绍了Mybatis之映射实体类中不区分大小写的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • 超详细介绍idea中java程序打jar包的两种方式

    超详细介绍idea中java程序打jar包的两种方式

    这篇文章主要介绍了超详细介绍idea中java程序打jar包的两种方式一种是可直接执行的runnable jar文件,另一种是包含多个主类,运行时需要指定主类全类名的jar包,感兴趣的可以了解一下
    2020-07-07
  • Spring Boot 将yyyy-MM-dd格式的文本字符串直接转换为LocalDateTime出现的问题

    Spring Boot 将yyyy-MM-dd格式的文本字符串直接转换为LocalDateTime出现的问题

    这篇文章主要介绍了Spring Boot 将yyyy-MM-dd格式的文本字符串直接转换为LocalDateTime出现的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09

最新评论