最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot集成Swagger2構(gòu)建可視化API文檔的完整步驟

 更新時(shí)間:2025年07月18日 10:47:59   作者:越來越無動(dòng)于衷  
在前后端分離開發(fā)中,API文檔是連接前后端的重要橋梁,Swagger作為一款強(qiáng)大的API文檔工具,能自動(dòng)生成交互式API文檔,極大提升開發(fā)效率,本文將詳細(xì)介紹SpringBoot項(xiàng)目集成Swagger2的完整步驟,包含配置細(xì)節(jié)、常見問題及解決方案,需要的朋友可以參考下

一、Swagger 簡(jiǎn)介

Swagger 是一套用于生成、描述和調(diào)用 RESTful API 的規(guī)范和工具,主要優(yōu)勢(shì)包括:

  • 自動(dòng)生成文檔:無需手動(dòng)編寫,通過代碼注解自動(dòng)生成 API 文檔。
  • 交互式調(diào)試:支持在線測(cè)試 API 接口,無需依賴 Postman 等工具。
  • 版本管理:方便 API 版本迭代和維護(hù)。
  • 團(tuán)隊(duì)協(xié)作:前后端開發(fā)者可基于同一套文檔協(xié)作,減少溝通成本。

二、環(huán)境準(zhǔn)備

基礎(chǔ)環(huán)境

  • JDK:17 及以上(本文基于 Spring Boot 3.x,需兼容 Java 17+)
  • Spring Boot 版本:3.5.3(其他 2.6+ 版本可參考,注意版本兼容)
  • 開發(fā)工具: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)存在一定兼容性問題,需通過后續(xù)配置解決(見步驟 3)。

 如果不成功可以

2. 配置 Swagger 核心類

創(chuàng)建 SwaggerConfig 配置類,用于自定義 Swagger 文檔信息、掃描規(guī)則等:

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 // 標(biāo)識(shí)為配置類
@EnableSwagger2 // 啟用 Swagger2
public class SwaggerConfig implements WebMvcConfigurer {
 
    /**
     * 配置 Swagger 核心對(duì)象 Docket
     */
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2) // 指定 Swagger 版本為 2.x
                .apiInfo(apiInfo()) // 配置 API 文檔基本信息
                .select()
                // 配置接口掃描規(guī)則:只掃描帶有 @ApiOperation 注解的方法
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                .paths(PathSelectors.any()) // 匹配所有路徑
                .build()
                .enable(true); // 是否啟用 Swagger(生產(chǎn)環(huán)境可設(shè)為 false 關(guān)閉)
    }
 
    /**
     * 配置 API 文檔頁面信息(標(biāo)題、描述、版本等)
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Spring Boot API 文檔") // 文檔標(biāo)題
                .description("接口文檔詳情:包含用戶管理、數(shù)據(jù)查詢等接口") // 文檔描述
                .version("1.0.0") // 接口版本
                .contact(new Contact("開發(fā)者", "https://xxx.com", "xxx@example.com")) // 聯(lián)系人信息
                .license("Apache 2.0") // 許可協(xié)議
                .licenseUrl("https://www.apache.org/licenses/LICENSE-2.0") // 許可協(xié)議鏈接
                .build();
    }
 
    /**
     * 配置靜態(tài)資源映射(解決 Swagger UI 頁面無法訪問問題)
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 映射 Swagger UI 靜態(tài)資源
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        // 映射 webjars 靜態(tài)資源(Swagger UI 依賴的前端資源)
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
        // 映射項(xiàng)目自定義靜態(tài)資源(如需要)
        registry.addResourceHandler("/**")
                .addResourceLocations("classpath:/static/");
    }
}

3. 解決 Spring Boot 版本兼容問題

Spring Boot 2.6+ 及 3.x 版本默認(rèn)使用 PathPatternParser 作為路徑匹配策略,與 Swagger2 存在沖突,需手動(dòng)切換為 AntPathMatcher。

在 application.yml 中添加配置:

spring:
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher # 切換為 Ant 風(fēng)格路徑匹配器

4. 編寫 API 接口并添加 Swagger 注解

在 Controller 中使用 Swagger 注解描述接口,生成更詳細(xì)的文檔:

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 = "獲取數(shù)據(jù)庫中所有人員信息列表") // 描述方法作用
    @RequestMapping("/findAll")
    @ResponseBody
    public List<Person> findAll() {
        return personService.findAll();
    }
 
    @ApiOperation(value = "添加人員", notes = "根據(jù)傳入的人員信息新增一條記錄")
    @RequestMapping("/insert")
    @ResponseBody
    public String insert(
            @ApiParam(name = "person", value = "人員實(shí)體對(duì)象", required = true) // 描述參數(shù)
            Person person) {
        int result = personService.insert(person);
        return result > 0 ? "插入成功" : "插入失敗";
    }
 
    @ApiOperation(value = "刪除人員", notes = "根據(jù) 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 為簡(jiǎn)短說明,notes 為詳細(xì)描述)。
  • @ApiParam(...):描述方法參數(shù)(名稱、說明、是否必填、示例值等)。
  • @ApiModel(...):描述實(shí)體類(如 Person)。
  • @ApiModelProperty(...):描述實(shí)體類字段(如 Person 的 nameage 字段)。

5. 訪問 Swagger UI 文檔

啟動(dòng) Spring Boot 項(xiàng)目,訪問以下地址:
http://localhost:8080/swagger-ui.html

成功訪問后,將看到如下界面:

  • 左側(cè):接口列表(按 Controller 分組)。
  • 右側(cè):接口詳情(請(qǐng)求參數(shù)、響應(yīng)示例、測(cè)試按鈕等)。

可直接在頁面上輸入?yún)?shù),點(diǎn)擊「Try it out」測(cè)試接口,無需額外工具。

四、常見問題及解決方案

1. 訪問 swagger-ui.html 出現(xiàn) 404 錯(cuò)誤

  • 原因 1:靜態(tài)資源映射未配置或錯(cuò)誤。
    解決:檢查 SwaggerConfig 中的 addResourceHandlers 方法,確保路徑映射正確。
  • 原因 2:Spring Boot 版本與 Swagger2 不兼容。
    解決:確認(rèn) mvc.pathmatch.matching-strategy 已設(shè)置為 ant_path_matcher。
  • 原因 3:依賴缺失或版本沖突。
    解決:檢查 pom.xml 中 springfox-swagger2 和 springfox-swagger-ui 版本是否一致(推薦 2.9.2)。

2. 接口未在 Swagger 文檔中顯示

  • 原因 1Docket 配置的掃描規(guī)則過濾了接口。
    解決:修改 apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) 為 apis(RequestHandlerSelectors.basePackage("com.qcby.springboot.controller"))(掃描指定包下的所有接口)。
  • 原因 2:接口未添加 @ApiOperation 注解。
    解決:在需要顯示的方法上添加 @ApiOperation 注解。

3. Spring Boot 3.x 兼容問題

Swagger2(springfox)對(duì) 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構(gòu)建可視化API文檔的完整步驟的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot Swagger2可視化API文檔的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SPRING管理XML方式過程解析

    SPRING管理XML方式過程解析

    這篇文章主要介紹了SPRING管理XML方式過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Java導(dǎo)出Word文檔的四種方法

    Java導(dǎo)出Word文檔的四種方法

    在日常的開發(fā)工作中,我們時(shí)常會(huì)遇到導(dǎo)出Word文檔報(bào)表的需求,比如公司的財(cái)務(wù)報(bào)表、醫(yī)院的患者統(tǒng)計(jì)報(bào)表、電商平臺(tái)的銷售報(bào)表等等,所以本文給大家介紹了Java導(dǎo)出Word文檔的四種方法,并通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • SpringCloudStream+RabbitMQ使用中遇到的問題及解決

    SpringCloudStream+RabbitMQ使用中遇到的問題及解決

    本文總結(jié)了在使用RabbitMQ和Spring Cloud Stream時(shí)遇到的4個(gè)常見問題,并給出了相應(yīng)的解決方案,包括生產(chǎn)者路由綁定、隊(duì)列組名稱、輸入輸出通道定義不正確等問題
    2026-05-05
  • java實(shí)現(xiàn)處理對(duì)象不為空則返回,為空則繼續(xù)

    java實(shí)現(xiàn)處理對(duì)象不為空則返回,為空則繼續(xù)

    在Java中有多種方法可以處理對(duì)象不為空則返回,為空則繼續(xù)的邏輯,本文為大家整理了幾種常見的實(shí)現(xiàn)方式,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2025-12-12
  • MyBatis中一對(duì)多的xml配置方式(嵌套查詢/嵌套結(jié)果)

    MyBatis中一對(duì)多的xml配置方式(嵌套查詢/嵌套結(jié)果)

    這篇文章主要介紹了MyBatis中一對(duì)多的xml配置方式(嵌套查詢/嵌套結(jié)果),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • springboot中配置好登錄攔截后,swagger訪問不了問題

    springboot中配置好登錄攔截后,swagger訪問不了問題

    這篇文章主要介紹了springboot中配置好登錄攔截后,swagger訪問不了問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • java使用ant.jar解壓縮文件的示例代碼

    java使用ant.jar解壓縮文件的示例代碼

    這篇文章主要介紹了java使用ant.jar解壓縮文件,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • Java并發(fā)之BlockingQueue的使用

    Java并發(fā)之BlockingQueue的使用

    這篇文章主要介紹了Java并發(fā)之BlockingQueue的使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • SpringBoot 整合Redisson重寫cacheName支持多參數(shù)的案例代碼

    SpringBoot 整合Redisson重寫cacheName支持多參數(shù)的案例代碼

    這篇文章主要介紹了SpringBoot 整合Redisson重寫cacheName支持多參數(shù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • Java跨session實(shí)現(xiàn)token接口測(cè)試過程圖解

    Java跨session實(shí)現(xiàn)token接口測(cè)試過程圖解

    這篇文章主要介紹了Java跨session實(shí)現(xiàn)token接口測(cè)試過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04

最新評(píng)論

高碑店市| 克什克腾旗| 宜兰县| 赣榆县| 万全县| 瑞安市| 祁阳县| 萨迦县| 财经| 醴陵市| 日照市| 秦安县| 苍山县| 昭苏县| 内黄县| 宁城县| 大悟县| 楚雄市| 尚义县| 肇源县| 宜昌市| 黔江区| 册亨县| 岑巩县| 庆城县| 华阴市| 阿勒泰市| 滦南县| 都匀市| 咸丰县| 德惠市| 鹤岗市| 上虞市| 原阳县| 广宗县| 海兴县| 沙坪坝区| 金寨县| 视频| 商水县| 达拉特旗|