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

Swagger/Knife4j文檔注解不更新問題的常見解決方案

 更新時(shí)間:2025年09月16日 09:34:02   作者:一勺菠蘿丶  
在日常開發(fā)中,很多同學(xué)都會(huì)遇到明明改了 DTO 的 @Schema、@ApiModelProperty 注解,但打開 doc.html 或 swagger-ui 時(shí),文檔就是不更新,尤其是當(dāng) 請(qǐng)求/響應(yīng)對(duì)象用到了內(nèi)部類(nested static class) 時(shí),所以本文就把常見原因和解決方案總結(jié)出來,需要的朋友可以參考下

在日常開發(fā)中,很多同學(xué)都會(huì)遇到這樣的問題:

明明改了 DTO 的 @Schema@ApiModelProperty 注解,但打開 doc.htmlswagger-ui 時(shí),文檔就是不更新!

尤其是當(dāng) 請(qǐng)求/響應(yīng)對(duì)象用到了內(nèi)部類(nested static class) 時(shí),這個(gè)問題更常見。本文就把常見原因和解決方案總結(jié)出來,幫大家徹底避坑。

1、問題原因

內(nèi)部類(Nested Static Class)的緩存機(jī)制

  • Swagger/Knife4j 對(duì)內(nèi)部類會(huì)生成類似 OuterClass$InnerClass 的 schema 名稱。
  • 這部分有緩存機(jī)制,注解改了但類文件沒被替換時(shí),Swagger 仍然會(huì)使用舊的緩存。

Springdoc/Knife4j 的緩存

  • 為了性能,Springdoc/Knife4j 默認(rèn)會(huì)緩存模型(Schema)信息。
  • 這就導(dǎo)致改了注解,重啟服務(wù)后文檔有時(shí)也不更新。

編譯產(chǎn)物未刷新

  • IDE(如 IDEA)在二次啟動(dòng)時(shí)可能不會(huì)重新編譯內(nèi)部類,導(dǎo)致 OuterClass$InnerClass.class 沒有更新,Swagger 讀到的還是舊字節(jié)碼。

2、解決方案

方案一:拆分內(nèi)部類

把內(nèi)部類單獨(dú)抽出來,定義為獨(dú)立的 DTO 類。

@Data
@Schema(description = "采購入庫保存請(qǐng)求")
public class ErpPurchaseInSaveReqVO {

    @Schema(description = "保存項(xiàng)列表")
    private List<ErpPurchaseInSaveItemReqVO> items;
}

@Data
@Schema(description = "采購入庫保存項(xiàng)")
public class ErpPurchaseInSaveItemReqVO {
    @Schema(description = "商品ID", requiredMode = Schema.RequiredMode.REQUIRED)
    private Long productId;
}

這是最推薦的方式,Swagger/Knife4j 的解析最穩(wěn)定。

方案二:保留內(nèi)部類,但加上唯一的 @Schema(name)

如果確實(shí)想用內(nèi)部類,可以這樣:

@Data
@Schema(description = "采購入庫保存請(qǐng)求")
public class ErpPurchaseInSaveReqVO {

    @Data
    @Schema(name = "ErpPurchaseInSaveItemReqVO", description = "采購入庫保存項(xiàng)")
    public static class Item {
        @Schema(description = "商品ID", requiredMode = Schema.RequiredMode.REQUIRED)
        private Long productId;
    }
}

注意:

  • name 必須唯一,否則多個(gè)內(nèi)部類會(huì)沖突。
  • 配合 clean 編譯 效果更佳。

方案三:禁用 Springdoc 緩存

application-dev.yml 里加上:

springdoc:
  api-docs:
    enabled: true
    path: /v3/api-docs
  swagger-ui:
    enabled: true
    path: /swagger-ui
  default-flat-param-object: true
  cache:
    disabled: true # 禁用緩存,每次啟動(dòng)重新生成文檔

這樣每次啟動(dòng)服務(wù)時(shí),都會(huì)強(qiáng)制重新掃描類并生成文檔。

推薦在 開發(fā)環(huán)境 打開,生產(chǎn)環(huán)境保持默認(rèn)緩存以節(jié)省性能。

方案四:確保編譯產(chǎn)物更新

  • 每次改注解后執(zhí)行 mvn clean compile,保證 .class 文件更新。
  • 或在 IDEA 中執(zhí)行 Build → Rebuild Project
  • 訪問 doc.html 時(shí),使用 Ctrl+F5 強(qiáng)制刷新瀏覽器緩存。

3、總結(jié)推薦

  • 開發(fā)階段:建議用 方案二 + 方案三(內(nèi)部類加 @Schema(name) + 禁用緩存),這樣改注解后重啟服務(wù)就能生效。
  • 長(zhǎng)期維護(hù):推薦 方案一,把內(nèi)部類抽成獨(dú)立 DTO 類,Swagger/Knife4j 解析最穩(wěn)定,后續(xù)協(xié)作成本更低。

一句話總結(jié)

Swagger/Knife4j 文檔不更新,大多數(shù)情況下是 內(nèi)部類緩存 + 文檔緩存 + 編譯不刷新 三者疊加的鍋。
禁用緩存 + 唯一命名 + clean 編譯,基本能解決 90% 的問題。

到此這篇關(guān)于Swagger/Knife4j文檔注解不更新問題的常見解決方案的文章就介紹到這了,更多相關(guān)Swagger/Knife4j文檔注解不更新內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何運(yùn)行SpringBoot項(xiàng)目的方法

    如何運(yùn)行SpringBoot項(xiàng)目的方法

    這篇文章主要介紹了如何運(yùn)行SpringBoot項(xiàng)目的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • java-for循環(huán)問題

    java-for循環(huán)問題

    這篇文章主要介紹了java-for循環(huán)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • SpringBoot如何實(shí)現(xiàn)一個(gè)Redis限流注解

    SpringBoot如何實(shí)現(xiàn)一個(gè)Redis限流注解

    這篇文章主要介紹了利用SpringBoot實(shí)現(xiàn)一個(gè)Redis限流注解方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Mybatis-Plus查詢中如何排除標(biāo)識(shí)字段

    Mybatis-Plus查詢中如何排除標(biāo)識(shí)字段

    這篇文章主要介紹了Mybatis-Plus查詢中排除標(biāo)識(shí)字段的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringSecurity多認(rèn)證器配置多模式登錄自定義認(rèn)證器方式

    SpringSecurity多認(rèn)證器配置多模式登錄自定義認(rèn)證器方式

    這篇文章主要介紹了SpringSecurity多認(rèn)證器配置多模式登錄自定義認(rèn)證器方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Spring JPA學(xué)習(xí)之delete方法示例詳解

    Spring JPA學(xué)習(xí)之delete方法示例詳解

    這篇文章主要為大家介紹了Spring JPA學(xué)習(xí)delete方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • SpringBoot集成ffmpeg實(shí)現(xiàn)視頻轉(zhuǎn)碼播放示例詳解

    SpringBoot集成ffmpeg實(shí)現(xiàn)視頻轉(zhuǎn)碼播放示例詳解

    這篇文章主要為大家介紹了SpringBoot集成ffmpeg實(shí)現(xiàn)視頻轉(zhuǎn)碼播放示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • IDEA實(shí)現(xiàn)JDBC的操作步驟

    IDEA實(shí)現(xiàn)JDBC的操作步驟

    JDBC提供了一種基準(zhǔn),據(jù)此可以構(gòu)建更高級(jí)的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠編寫數(shù)據(jù)庫應(yīng)用程序,本文給大家介紹IDEA實(shí)現(xiàn)JDBC的操作步驟,感興趣的朋友一起看看吧
    2022-01-01
  • SpringBoot整合Swagger2的示例

    SpringBoot整合Swagger2的示例

    這篇文章主要介紹了SpringBoot整合Swagger2的示例,幫助大家更好的理解和學(xué)習(xí)springboot框架,感興趣的朋友可以了解下
    2020-11-11
  • SpringMVC請(qǐng)求數(shù)據(jù)詳解講解

    SpringMVC請(qǐng)求數(shù)據(jù)詳解講解

    Spring MVC 是 Spring 提供的一個(gè)基于 MVC 設(shè)計(jì)模式的輕量級(jí) Web 開發(fā)框架,本質(zhì)上相當(dāng)于 Servlet,Spring MVC 角色劃分清晰,分工明細(xì),本章來講解SpringMVC如何請(qǐng)求數(shù)據(jù)
    2022-07-07

最新評(píng)論