Spring集成Swagger常見(jiàn)錯(cuò)誤及解決辦法
概覽
在當(dāng)下幾乎所有的公司都采用了前后端分離的開(kāi)發(fā)模式,Swagger作為了在API在線文檔工具,幾乎是后端開(kāi)發(fā)的必備組件,最近公司的有個(gè)項(xiàng)目,在項(xiàng)目啟動(dòng)和打開(kāi)Swagger頁(yè)面時(shí)候,后端產(chǎn)生了大量的異常日志,雖然不影響現(xiàn)在的正常啟動(dòng),不過(guò),每次看到大量的異常日志,對(duì)于有代碼潔癖的我,不能忍。于是乎今天抽了個(gè)時(shí)間把以下這些問(wèn)題解決了,解決后再看日志,簡(jiǎn)直不能再爽歪歪啦~ 下面對(duì)問(wèn)題以及解決的辦法做個(gè)記錄。
問(wèn)題一
異常描述:No enum constant org.springframework.web.bind.annotation.RequestMethod.Get
項(xiàng)目啟動(dòng)的時(shí)候,后臺(tái)日志報(bào)如下異常:

原因
根據(jù)異常棧,能看出是springfox-swagger-common執(zhí)行OperationHttpMethodReader.apply()方法是拋出來(lái)的,分析日志 RequestMethod.Get 沒(méi)有對(duì)應(yīng)的enum,通過(guò)檢查Controller中RequestMethod,發(fā)現(xiàn)了問(wèn)題所在:

枚舉類中method方法都是大寫, 而我的代碼中將method寫成了:

導(dǎo)致了在獲取enum類型的時(shí)候,匹配不上拋出異常。
解決辦法
將httpMethod = "Get" 給成 "GET"即可。其實(shí)原來(lái)就很好奇為什么httpMethod后添加的方法名稱是大寫,當(dāng)時(shí)也沒(méi)有深入的去研究,正好借此機(jī)會(huì)知道背后的原因,這樣在開(kāi)發(fā)過(guò)程中才能避免很多坑~~
問(wèn)題二
異常描述:java.lang.NumberFormatException:For input string:""
項(xiàng)目起來(lái)后,訪問(wèn)swagger-ui.html頁(yè)面后,接口文檔可以正常展示和使用,不過(guò)后臺(tái)會(huì)出現(xiàn)異常的日志:

原因
看日志,swagger-models這個(gè)包中的AbstractSerializableParameter.getExample()方法的時(shí)候出現(xiàn)異常了,此外還有一條WARN日志,Illegal DefaultValue null for parameter type integer,意思是:有個(gè)默認(rèn)值是空字符串的變量轉(zhuǎn)換成Integer類型時(shí)異常。
通過(guò)全局檢索:Illegal DefaultValue,查看如下:

發(fā)現(xiàn)example只判斷的null這種情況,當(dāng)example如果為空字符串的話,照樣往下執(zhí)行,Long.valueOf(example)就是拋出異常,奔潰的心,好想把他的源碼改掉呀~
解決辦法
分析了下maven的包依賴:

發(fā)現(xiàn)swagger-models的版本為 1.5.20,果斷去mvnrepository上去尋找有么有新的包修復(fù)過(guò)這個(gè)bug:

發(fā)現(xiàn)最新的版本 1.6.2,果斷換成最新版本:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 解決 Illegal DefaultValue null for parameter type integer -->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
<version>1.6.2</version>
</dependency>
看下源碼:

發(fā)現(xiàn)這個(gè)bug已經(jīng)修復(fù)啦,哈哈哈哈
以上就是Spring集成Swagger常見(jiàn)錯(cuò)誤及解決辦法的詳細(xì)內(nèi)容,更多關(guān)于Spring集成Swagger常見(jiàn)錯(cuò)誤的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
@JsonFormat?和?@DateTimeFormat?時(shí)間格式化注解(場(chǎng)景示例代碼)
這篇文章主要介紹了@JsonFormat和@DateTimeFormat時(shí)間格式化注解,本文通過(guò)場(chǎng)景示例代碼詳解給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05
分布式醫(yī)療掛號(hào)系統(tǒng)EasyExcel導(dǎo)入導(dǎo)出數(shù)據(jù)字典的使用
這篇文章主要為大家介紹了分布式醫(yī)療掛號(hào)系統(tǒng)EasyExcel導(dǎo)入導(dǎo)出數(shù)據(jù)字典的使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04
Java多線程并發(fā)之線程池任務(wù)請(qǐng)求攔截測(cè)試實(shí)例
這篇文章主要介紹了Java多線程并發(fā)之線程池任務(wù)請(qǐng)求攔截測(cè)試實(shí)例,隊(duì)列中永遠(yuǎn)沒(méi)有線程被加入,即使線程池已滿,也不會(huì)導(dǎo)致被加入排隊(duì)隊(duì)列,實(shí)現(xiàn)了只有線程池存在空閑線程的時(shí)候才會(huì)接受新任務(wù)的需求,需要的朋友可以參考下2023-12-12
SpringBoot框架RESTful接口設(shè)置跨域允許
這篇文章主要為大家詳細(xì)介紹了SpringBoot框架RESTful接口設(shè)置跨域允許,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08
java 運(yùn)行報(bào)錯(cuò)has been compiled by a more recent version of the J
java 運(yùn)行報(bào)錯(cuò)has been compiled by a more recent version of the Java Runtime (class file version 54.0)2021-04-04
SpringBoot+MyBatis-Flex配置ProxySQL的實(shí)現(xiàn)步驟
本文主要介紹了SpringBoot+MyBatis-Flex配置ProxySQL的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02

