欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringDoc基本使用的方法示例

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

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

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

  • 開(kāi)箱即用

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

  • 注解驅(qū)動(dòng)

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

  • 動(dòng)態(tài)兼容性

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

  • 多格式輸出

    支持 JSON/YAML/HTML 格式文檔,并提供分組功能,可按模塊劃分接口(如公開(kāi) 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:
    # 開(kāi)啟 swagger-ui 文檔展示
    enabled: true
    # UI訪問(wèn)路徑
    path: /swagger-ui.html
    # 標(biāo)簽排序方式
    tags-sorter: alpha
    # 操作排序方式
    operations-sorter: alpha
    # 保持認(rèn)證狀態(tài)
    persistAuthorization: true
    # 禁用示例接口
    disable-swagger-default-url: true
  api-docs:
    # 開(kāi)啟 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端點(diǎn)
  show-actuator: false
  # 推薦保持默認(rèn),顯示結(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 = "項(xiàng)目API文檔", version = "1.0", description = "SpringBoot接口文檔")
)
public class SpringDocConfig { 
  // 無(wú)需額外代碼
}

注解使用

常用注解

場(chǎng)景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
解析對(duì)象屬性為查詢參數(shù)@ParameterObjectpublic BizResponse getUserPage(@ParameterObject UserPageForm form) {}

提示:

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

控制層注解使用示例

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

    @Operation(summary = "獲取用戶信息", description = "通過(guò)用戶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){
        // 實(shí)現(xiàn)代碼
        return new ResponseEntity(new User(10001,"feng","ADMIN"), HttpStatusCode.valueOf(200));
    }
    
    @Operation(summary = "獲取用戶列表-分頁(yè)")
    @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 = "用戶名長(zhǎng)度必須在3到20個(gè)字符之間")
    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 = "最近登錄時(shí)間", 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 無(wú)法識(shí)別為文件類型,文件參數(shù)不會(huì)顯示為文件上傳控件

  • @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ù)請(qǐng)求",
    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

分組與擴(kuò)展功能

分組配置

按模塊隔離接口

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

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

訪問(wèn) Swagger UI 右上角切換分組

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

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

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

從 SpringFox 遷移指南

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

遷移優(yōu)勢(shì):

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

最佳實(shí)踐與常見(jiàn)問(wèn)題

  1. 依賴沖突

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

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

    若項(xiàng)目使用 Spring Security,需放行文檔路徑:

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

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

總結(jié)

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

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

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

相關(guān)文章

  • 淺談Java中的分布式鎖

    淺談Java中的分布式鎖

    這篇文章主要介紹了淺談Java中的分布式鎖,為了保證一個(gè)方法或?qū)傩栽诟卟l(fā)情況下的同一時(shí)間只能被同一個(gè)線程執(zhí)行,在傳統(tǒng)單體應(yīng)用單機(jī)部署的情況下,可以使用Java并發(fā)處理相關(guān)的API(如ReentrantLock或Synchronized)進(jìn)行互斥控制,需要的朋友可以參考下
    2023-09-09
  • java生成圖片驗(yàn)證碼的示例代碼

    java生成圖片驗(yàn)證碼的示例代碼

    這篇文章主要介紹了java生成圖片驗(yàn)證碼的示例代碼,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-09-09
  • Java方法能定義多少個(gè)參數(shù)你知道嗎

    Java方法能定義多少個(gè)參數(shù)你知道嗎

    這篇文章主要給大家介紹了關(guān)于Java方法能定義多少個(gè)參數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • SpringCloud Gateway路由組件詳解

    SpringCloud Gateway路由組件詳解

    SpringCloud Gateway 是 Spring Cloud 的一個(gè)全新項(xiàng)目,它旨在為微服務(wù)架構(gòu)提供一種簡(jiǎn)單有效的統(tǒng)一的 API 路由管理方式。這篇文章主要介紹了SpringCloud Gateway網(wǎng)關(guān)作用,需要的朋友可以參考下
    2023-02-02
  • java如何使用自己的maven本地倉(cāng)庫(kù)詳解

    java如何使用自己的maven本地倉(cāng)庫(kù)詳解

    這篇文章主要給大家介紹了關(guān)于java如何使用自己的maven本地倉(cāng)庫(kù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • 詳解Java的Exception異常機(jī)制

    詳解Java的Exception異常機(jī)制

    Java的Exception異常機(jī)制,為什么會(huì)突然聊到異常?其實(shí)不是突然,而是我已經(jīng)準(zhǔn)備了很久,但苦于沒(méi)有好的例子來(lái)講解,從表象到底層實(shí)現(xiàn),今天就帶大家詳細(xì)了解Exception異常,需要的朋友可以參考下
    2021-05-05
  • 為什么SpringMVC中請(qǐng)求的body不支持多次讀取

    為什么SpringMVC中請(qǐng)求的body不支持多次讀取

    這篇文章主要介紹了為什么SpringMVC中請(qǐng)求的body不支持多次讀取,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 詳解SpringBoot如何統(tǒng)一處理返回的信息

    詳解SpringBoot如何統(tǒng)一處理返回的信息

    現(xiàn)在的項(xiàng)目是前后端開(kāi)發(fā)的居多,那么我們?cè)趺炊x接口返回的數(shù)據(jù),怎么使用?Spring?Boot?來(lái)統(tǒng)一處理返回的信息呢,本文就來(lái)和大家簡(jiǎn)單講講
    2023-06-06
  • Java求字符串長(zhǎng)度的方法舉例

    Java求字符串長(zhǎng)度的方法舉例

    這篇文章主要給大家介紹了關(guān)于Java求字符串長(zhǎng)度的相關(guān)資料,Java中的字符串是一種常見(jiàn)的數(shù)據(jù)類型,用于表示文本數(shù)據(jù),文中給出了詳細(xì)的代碼實(shí)例,需要的朋友可以參考下
    2023-10-10
  • Spring MVC中使用Controller如何進(jìn)行重定向

    Spring MVC中使用Controller如何進(jìn)行重定向

    這篇文章主要介紹了Spring MVC中使用Controller如何進(jìn)行重定向操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評(píng)論