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

SpringDoc基本使用的方法示例

 更新時間:2025年07月22日 09:18:31   作者:墨鴉_Cormorant  
SpringDoc是基于Spring Boot的現(xiàn)代化API文檔生成工具,下面就來介紹一下SpringDoc基本使用,具有一定的參考價值,感興趣的可以了解一下

SpringDoc 是基于 Spring Boot 的現(xiàn)代化 API 文檔生成工具,通過自動化掃描代碼和注解,生成符合 OpenAPI 3.0+ 規(guī)范 的交互式文檔,并集成 Swagger UI 提供可視化測試界面。以下是其核心詳解:

核心特性與優(yōu)勢

  • 開箱即用

    僅需添加依賴,無需復(fù)雜配置即可自動生成文檔,支持 Spring WebMvc、WebFlux、Spring Security 及 Jakarta EE。

  • 注解驅(qū)動

    使用 JSR-303 規(guī)范注解(如 @Tag、@Operation)替代 SpringFox 專屬注解,降低學習成本。

  • 動態(tài)兼容性

    完美適配 Spring Boot 2.6+ 及 3.x(含 JDK 17+),解決 SpringFox 因停維護導(dǎo)致的不兼容問題。

  • 多格式輸出

    支持 JSON/YAML/HTML 格式文檔,并提供分組功能,可按模塊劃分接口(如公開 API 與內(nèi)部 API)。

集成與配置

依賴引入(Spring Boot 3.x)

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.5.0</version> <!-- 官方穩(wěn)定版,兼容 Spring Boot 3.3.x:cite[2]:cite[8] -->
</dependency>

基礎(chǔ)配置(application.yml)

springdoc:
  swagger-ui:
    # 開啟 swagger-ui 文檔展示
    enabled: true
    # UI訪問路徑
    path: /swagger-ui.html
    # 標簽排序方式
    tags-sorter: alpha
    # 操作排序方式
    operations-sorter: alpha
    # 保持認證狀態(tài)
    persistAuthorization: true
    # 禁用示例接口
    disable-swagger-default-url: true
  api-docs:
    # 開啟 OpenAPI 展示
    enabled: true
    # OpenAPI JSON路徑
    path: /v3/api-docs
  default-consumes-media-type: application/json
  default-produces-media-type: application/json
  cache:
    # 關(guān)閉文檔緩存
    disabled: false
  # 顯示actuator端點
  show-actuator: false
  # 推薦保持默認,顯示結(jié)構(gòu)化參數(shù)
  # default-flat-param-object: true
  # 允許在文檔中展示 Spring MVC 的 ModelAndView 返回類型
  model-and-view-allowed: true
  # 推薦關(guān)閉以確保文檔精確性
  override-with-generic-response: false

全局信息配置類(可選)

@Configuration
@OpenAPIDefinition(
  info = @Info(title = "項目API文檔", version = "1.0", description = "SpringBoot接口文檔")
)
public class SpringDocConfig { 
  // 無需額外代碼
}

注解使用

常用注解

場景SpringDoc 注解示例
控制器描述@Tag(name="模塊", description="")@Tag(name="用戶管理", description="用戶CRUD")
接口方法描述@Operation(summary="", description="")@Operation(summary="創(chuàng)建用戶", description="需管理員權(quán)限")
參數(shù)描述@Parameter(description="")@Parameter(description="用戶ID", required=true)
模型屬性描述@Schema(description="")public class User { @Schema(description="用戶名") private String name; }l
解析對象屬性為查詢參數(shù)@ParameterObjectpublic BizResponse getUserPage(@ParameterObject UserPageForm form) {}

提示:

  • @Hidden 可隱藏接口或參數(shù);
  • 支持 Spring Security 的 @PreAuthorize 注解,自動在文檔中標記權(quán)限需求。

控制層注解使用示例

@RestController
@RequestMapping("/api/users")
@Tag(name = "用戶管理", description = "用戶相關(guān)操作API")
public class UserController{

    @Operation(summary = "獲取用戶信息", description = "通過用戶id獲取用戶信息")
    @Parameters({
        @Parameter(in = ParameterIn.PATH, name = "id", description = "用戶uid", required = true)
    })
    @ApiResponse(responseCode = "404", description = "User not found")
    @GetMapping("/{id}")
    public ResponseEntity<User> getUserById(@PathVariable Long id){
        // 實現(xiàn)代碼
        return new ResponseEntity(new User(10001,"feng","ADMIN"), HttpStatusCode.valueOf(200));
    }
    
    @Operation(summary = "獲取用戶列表-分頁")
    @GetMapping("/userPage.do")
    public BizResponse getUserPage(@ParameterObject UserPageForm form) {
        return BizResponse.ok(userServer.getUserPage(form));
    }
    
    @Operation(summary = "文件上傳")
    @PostMapping(name = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public BizResponse<FileInfoVo> fileUpload(
            @Parameter(description = "文件",
                    content = @Content(mediaType = MediaType.MULTIPART_FORM_DATA_VALUE,
                            schema = @Schema(type = "string", format = "binary")))
            @RequestParam MultipartFile file) {
        FileInfo fileInfo = fileStorageService.of(file).setPath(uploadFilePath).upload();
        return BizResponse.ok(fileInfo);
    }
}

模型注解使用示例

import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.media.Schema.RequiredMode;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.Size;

@data
public clas sUser{

    @Schema(description = "用戶ID", example = "1001")
    private Integer id;

    @Schema(description = "用戶名", example = "john_doe", requiredMode = RequiredMode.REQUIRED)
    @Size(min = 3, max = 20, message = "用戶名長度必須在3到20個字符之間")
    private String username;
    
    @Schema(description = "用戶角色", allowableValues = {"ADMIN", "USER", "GUEST"})
    private String role;

    @Schema(description = "郵箱", example = "john_doe@mail.com")
    @Email
    private String email;
    
    @Schema(description = "最近登錄時間", example = "2025-07-15 12:25:32", type = "string")
    private Date lastLoginTime;
    
    @Schema(description = "出生年月日", example = "2025-07-15", type = "string")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date birthDate;
}

文件上傳注解使用示例

文件上傳必須聲明以下配置,否則 SpringDoc 無法識別為文件類型,文件參數(shù)不會顯示為文件上傳控件

  • @PostMapping 必須配置 consumes = MediaType.MULTIPART_FORM_DATA_VALUE
  • MultipartFile 參數(shù)必須明確聲明 format = "binary"

單文件上傳

@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@Operation(summary = "上傳文件")
public ResponseEntity<String> uploadFile(
    @Parameter(
        description = "文件參數(shù)",
        required = true,
        content = @Content( // 關(guān)鍵:嵌套Content注解
            mediaType = MediaType.APPLICATION_OCTET_STREAM_VALUE,
            schema = @Schema(type = "string", format = "binary") // 明確格式
        )
    )
    @RequestParam("file") MultipartFile file) {
    // 業(yè)務(wù)邏輯
}

多文件上傳(數(shù)組形式)

@Parameter(
    description = "多文件上傳",
    content = @Content(
        mediaType = MediaType.MULTIPART_FORM_DATA_VALUE,
        array = @ArraySchema( // 聲明數(shù)組類型
            schema = @Schema(type = "string", format = "binary")
        )
    )
)
@RequestParam("files") MultipartFile[] files

混合參數(shù)(文件+表單數(shù)據(jù))

@RequestBody(
    description = "混合參數(shù)請求",
    content = @Content(
        mediaType = MediaType.MULTIPART_FORM_DATA_VALUE,
        encoding = {
            @Encoding(name = "file", contentType = "image/jpeg"), // 指定文件類型
            @Encoding(name = "remark", contentType = "text/plain") // 文本參數(shù)
        }
    )
)
@RequestPart("file") MultipartFile file,
@RequestPart("remark") String remark

分組與擴展功能

分組配置

按模塊隔離接口

@Bean
public GroupedOpenApi publicApi() {
    return GroupedOpenApi.builder()
        .group("公開接口")
        .pathsToMatch("/api/public/**")
        .build();
}

@Bean
public GroupedOpenApi adminApi() {
    return GroupedOpenApi.builder()
        .group("管理接口")
        .pathsToMatch("/api/admin/**")
        .addOpenApiMethodFilter(method -> method.isAnnotationPresent(PreAuthorize.class))
        .build();
}

訪問 Swagger UI 右上角切換分組

生產(chǎn)環(huán)境安全建議

通過配置動態(tài)關(guān)閉文檔

springdoc:
  swagger-ui:
    enabled: false   # 生產(chǎn)環(huán)境禁用 UI
  api-docs:
    enabled: false   # 禁用 OpenAPI 端點:cite[1]

從 SpringFox 遷移指南

SpringFox 注解SpringDoc 替代方案
@Api@Tag
@ApiOperation@Operation(summary="", description="")
@ApiModelProperty@Schema(description="")
@ApiParam@Parameter
@ApiIgnore@Hidden

遷移優(yōu)勢:

  • 支持 Spring Boot 3.x 和 JDK 17+;
  • 注解更簡潔,符合 OpenAPI 3 規(guī)范

最佳實踐與常見問題

  1. 依賴沖突

    排除舊版 Swagger 依賴(如 springfox-swagger2),避免與 SpringDoc 沖突1。

  2. 攔截器導(dǎo)致文檔無法訪問

    若項目使用 Spring Security,需放行文檔路徑:

    http.authorizeRequests().antMatchers("/swagger-ui/**", "/v3/api-docs/**").permitAll();
    
  3. 文檔生成失敗排查

    檢查控制器是否被掃描:確保 @RestController 位于 springdoc.packages-to-scan 指定路徑下

總結(jié)

SpringDoc 憑借 零配置啟動、注解簡潔深度兼容 Spring 生態(tài) 的優(yōu)勢,已成為 Spring Boot API 文檔的首選工具。其核心價值在于:

  • 自動化 - 減少手動維護文檔的成本;
  • 標準化 - 嚴格遵循 OpenAPI 3 規(guī)范;
  • 可擴展 - 分組、安全控制靈活適配復(fù)雜項目。
  • 訪問 http://localhost:8080/swagger-ui.html 即可查看交互式文檔(默認路徑)

到此這篇關(guān)于SpringDoc基本使用的方法示例的文章就介紹到這了,更多相關(guān)SpringDoc使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Java的常用包

    Java的常用包

    本文主要對Java的常用包進行一一介紹。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • ShardingSphere 分庫分表原理與Spring Boot集成實踐方案

    ShardingSphere 分庫分表原理與Spring Boot集成實踐方案

    本文探討了ShardingSphere分庫分表原理及其Spring Boot集成方案,詳細闡述了SQL解析、分片路由、SQL改寫、結(jié)果歸并和事務(wù)管理等關(guān)鍵技術(shù)原理,感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • IDEA禁用JVM代理設(shè)置過程

    IDEA禁用JVM代理設(shè)置過程

    在IntelliJ IDEA中禁用JVM啟動代理設(shè)置的方法,解決網(wǎng)絡(luò)超時和項目啟動失敗問題,通過配置特定的JVM參數(shù),明確指示JVM不使用任何HTTP/HTTPS或socks代理進行網(wǎng)絡(luò)通信,此方法適用于解決IDEA內(nèi)置工具和項目啟動項目因代理配置錯誤導(dǎo)致的問題
    2026-05-05
  • Spring中ClassPathXmlApplicationContext類的使用詳解

    Spring中ClassPathXmlApplicationContext類的使用詳解

    這篇文章主要介紹了Spring中ClassPathXmlApplicationContext類的使用詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • springboot注冊攔截器所遇到的問題

    springboot注冊攔截器所遇到的問題

    這篇文章主要介紹了springboot注冊攔截器的方法及所遇到的問題,需要的朋友可以參考下
    2018-07-07
  • Java日常練習題,每天進步一點點(39)

    Java日常練習題,每天進步一點點(39)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • 一篇文章學會java死鎖與CPU 100%的排查

    一篇文章學會java死鎖與CPU 100%的排查

    這篇文章主要介紹了一篇文章學會java死鎖與CPU 100%的排查,文中主要介紹了Java死鎖以及服務(wù)器CPU占用率達到100%時的排查和解決方法,感興趣的朋友一起來看一看吧
    2021-08-08
  • SpringCloud的JPA連接PostgreSql的教程

    SpringCloud的JPA連接PostgreSql的教程

    這篇文章主要介紹了SpringCloud的JPA接入PostgreSql 教程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-06-06
  • MyBatis深入分析數(shù)據(jù)庫交互與關(guān)系映射

    MyBatis深入分析數(shù)據(jù)庫交互與關(guān)系映射

    這篇文章主要介紹了MyBatis中的數(shù)據(jù)庫交互與關(guān)系映射,MyBatis是一款優(yōu)秀的持久層框架,它支持定制化SQL、存儲過程以及高級映射,MyBatis避免了幾乎所有的JDBC代碼和手動設(shè)置參數(shù)以及獲取結(jié)果集,需要的朋友可以參考下
    2024-05-05
  • Java實現(xiàn)帶緩沖的輸入輸出流

    Java實現(xiàn)帶緩沖的輸入輸出流

    本文詳細講解了Java實現(xiàn)帶緩沖的輸入輸出流,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04

最新評論

锡林郭勒盟| 石河子市| 德州市| 永和县| 绥滨县| 通河县| 丽江市| 延长县| 黄陵县| 镇坪县| 微博| 集安市| 新建县| 长丰县| 长海县| 武平县| 大同县| 航空| 察雅县| 万宁市| 分宜县| 巴林左旗| 信宜市| 兴山县| 宁武县| 九寨沟县| 伊川县| 禄劝| 隆回县| 南和县| 三亚市| 环江| 巴东县| 若羌县| 大竹县| 新平| 乳山市| 类乌齐县| 望城县| 墨竹工卡县| 志丹县|