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

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é)出來(lái),需要的朋友可以參考下

在日常開發(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é)出來(lái),幫大家徹底避坑。

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ú)抽出來(lái),定義為獨(dú)立的 DTO 類。

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

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

@Data
@Schema(description = "采購(gòu)入庫(kù)保存項(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 = "采購(gòu)入庫(kù)保存請(qǐng)求")
public class ErpPurchaseInSaveReqVO {

    @Data
    @Schema(name = "ErpPurchaseInSaveItemReqVO", description = "采購(gòu)入庫(kù)保存項(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)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    SpringBoot如何上傳圖片

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

最新評(píng)論

金寨县| 乡宁县| 巴林右旗| 略阳县| 忻州市| 剑阁县| 乌什县| 武陟县| 黄冈市| 新巴尔虎左旗| 阿拉善右旗| 工布江达县| 榕江县| 渑池县| 宜春市| 咸宁市| 扶绥县| 炎陵县| 罗定市| 苍梧县| 延长县| 河曲县| 峡江县| 麟游县| 钦州市| 甘孜县| 西平县| 芦溪县| 瓦房店市| 武宣县| 宁波市| 顺平县| 威远县| 凤城市| 宿迁市| 噶尔县| 泰安市| 怀安县| 镇坪县| 西乌珠穆沁旗| 永川市|