Spring集成Swagger常見錯(cuò)誤及解決辦法
概覽
在當(dāng)下幾乎所有的公司都采用了前后端分離的開發(fā)模式,Swagger作為了在API在線文檔工具,幾乎是后端開發(fā)的必備組件,最近公司的有個(gè)項(xiàng)目,在項(xiàng)目啟動(dòng)和打開Swagger頁面時(shí)候,后端產(chǎn)生了大量的異常日志,雖然不影響現(xiàn)在的正常啟動(dòng),不過,每次看到大量的異常日志,對(duì)于有代碼潔癖的我,不能忍。于是乎今天抽了個(gè)時(shí)間把以下這些問題解決了,解決后再看日志,簡(jiǎn)直不能再爽歪歪啦~ 下面對(duì)問題以及解決的辦法做個(gè)記錄。
問題一
異常描述: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()方法是拋出來的,分析日志 RequestMethod.Get 沒有對(duì)應(yīng)的enum,通過檢查Controller中RequestMethod,發(fā)現(xiàn)了問題所在:
枚舉類中method方法都是大寫, 而我的代碼中將method寫成了:
導(dǎo)致了在獲取enum類型的時(shí)候,匹配不上拋出異常。
解決辦法
將httpMethod = "Get" 給成 "GET"即可。其實(shí)原來就很好奇為什么httpMethod后添加的方法名稱是大寫,當(dāng)時(shí)也沒有深入的去研究,正好借此機(jī)會(huì)知道背后的原因,這樣在開發(fā)過程中才能避免很多坑~~
問題二
異常描述:java.lang.NumberFormatException:For input string:""
項(xiàng)目起來后,訪問swagger-ui.html頁面后,接口文檔可以正常展示和使用,不過后臺(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í)異常。
通過全局檢索: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ù)過這個(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常見錯(cuò)誤及解決辦法的詳細(xì)內(nèi)容,更多關(guān)于Spring集成Swagger常見錯(cuò)誤的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
java實(shí)現(xiàn)創(chuàng)建臨時(shí)文件然后在程序退出時(shí)自動(dòng)刪除文件
這篇文章主要介紹了java實(shí)現(xiàn)創(chuàng)建臨時(shí)文件然后在程序退出時(shí)自動(dòng)刪除文件,從個(gè)人項(xiàng)目中提取出來的,小伙伴們可以直接拿走使用。2015-02-02Slf4j+logback實(shí)現(xiàn)JSON格式日志輸出方式
這篇文章主要介紹了Slf4j+logback實(shí)現(xiàn)JSON格式日志輸出方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12SpringBoot 啟動(dòng)方法run()源碼解析
這篇文章主要介紹了SpringBoot 啟動(dòng)方法run()源碼賞析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03Java并發(fā)底層實(shí)現(xiàn)原理學(xué)習(xí)心得
本片文章是學(xué)習(xí)Java并發(fā)底層實(shí)現(xiàn)原理的一篇知識(shí)心得,對(duì)大家學(xué)習(xí)這個(gè)方便的知識(shí)很有幫助,一起參考下。2018-01-01