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

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

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

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

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

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

1、問題原因

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

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

Springdoc/Knife4j 的緩存

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

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

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

2、解決方案

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

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

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

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

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

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

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

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

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

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

注意:

  • name 必須唯一,否則多個內(nèi)部類會沖突。
  • 配合 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 # 禁用緩存,每次啟動重新生成文檔

這樣每次啟動服務(wù)時,都會強(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 時,使用 Ctrl+F5 強(qiáng)制刷新瀏覽器緩存。

3、總結(jié)推薦

  • 開發(fā)階段:建議用 方案二 + 方案三(內(nèi)部類加 @Schema(name) + 禁用緩存),這樣改注解后重啟服務(wù)就能生效。
  • 長期維護(hù):推薦 方案一,把內(nèi)部類抽成獨立 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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java輕松實現(xiàn)權(quán)限認(rèn)證管理的示例代碼

    Java輕松實現(xiàn)權(quán)限認(rèn)證管理的示例代碼

    我們在實際開發(fā)中經(jīng)常會進(jìn)行權(quán)限認(rèn)證管理,給不同的人加上對應(yīng)的角色和權(quán)限,本文將實現(xiàn)一個簡易的權(quán)限驗證管理系統(tǒng),感興趣的小伙伴可以了解下
    2023-12-12
  • SpringBoot如何優(yōu)雅的處理校驗參數(shù)的方法

    SpringBoot如何優(yōu)雅的處理校驗參數(shù)的方法

    這篇文章主要介紹了SpringBoot如何優(yōu)雅的處理校驗參數(shù)的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Java多線程的原子性,可見性,有序性你都了解嗎

    Java多線程的原子性,可見性,有序性你都了解嗎

    這篇文章主要為大家詳細(xì)介紹了Java多線程的原子性,可見性,有序性,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Java模擬實現(xiàn)ATM機(jī)

    Java模擬實現(xiàn)ATM機(jī)

    這篇文章主要為大家詳細(xì)介紹了Java模擬實現(xiàn)ATM機(jī),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Java創(chuàng)建表格實例詳解

    Java創(chuàng)建表格實例詳解

    這篇文章主要介紹了Java創(chuàng)建表格實例詳解,需要的朋友可以參考下。
    2017-09-09
  • Java使用同步方法解決銀行取錢的安全問題案例分析

    Java使用同步方法解決銀行取錢的安全問題案例分析

    這篇文章主要介紹了Java使用同步方法解決銀行取錢的安全問題,結(jié)合具體案例形式分析了java同步方法實現(xiàn)多線程安全操作銀行取錢問題,需要的朋友可以參考下
    2019-09-09
  • Java實現(xiàn)md5和base64加密解密的示例代碼

    Java實現(xiàn)md5和base64加密解密的示例代碼

    這篇文章主要介紹了Java實現(xiàn)md5和base64加密解密的示例代碼,幫助大家更好的利用Java加密解密文件,感興趣的朋友可以了解下
    2020-09-09
  • 在Windows系統(tǒng)下安裝Thrift的方法與使用講解

    在Windows系統(tǒng)下安裝Thrift的方法與使用講解

    今天小編就為大家分享一篇關(guān)于在Windows系統(tǒng)下安裝Thrift的方法與使用講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Spring Cloud 整合Apache-SkyWalking實現(xiàn)鏈路跟蹤的方法

    Spring Cloud 整合Apache-SkyWalking實現(xiàn)鏈路跟蹤的方法

    這篇文章主要介紹了Spring Cloud 整合Apache-SkyWalking鏈路跟蹤的示例代碼,代碼簡單易懂,通過圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • SpringBoot如何上傳圖片

    SpringBoot如何上傳圖片

    這篇文章主要介紹了SpringBoot如何上傳圖片,幫助大家更好的理解和學(xué)習(xí)springboot框架,感興趣的朋友可以了解下
    2020-09-09

最新評論

SHOW| 建始县| 会泽县| 太和县| 中江县| 西充县| 万年县| 济宁市| 长丰县| 德兴市| 将乐县| 密山市| 公安县| 广河县| 韶山市| 宣武区| 泰顺县| 新乡市| 澄城县| 恩平市| 沙河市| 山东| 团风县| 平利县| 固原市| 资阳市| 沙湾县| 绥宁县| 永昌县| 平安县| 西乌珠穆沁旗| 靖西县| 大港区| 江西省| 乌拉特中旗| 榆林市| 铜山县| 濮阳市| 观塘区| 抚顺市| 团风县|