Spring集成Swagger常見錯誤及解決辦法

概覽

在當下幾乎所有的公司都采用瞭前後端分離的開發模式,Swagger作為瞭在API在線文檔工具,幾乎是後端開發的必備組件,最近公司的有個項目,在項目啟動和打開Swagger頁面時候,後端產生瞭大量的異常日志,雖然不影響現在的正常啟動,不過,每次看到大量的異常日志,對於有代碼潔癖的我,不能忍。於是乎今天抽瞭個時間把以下這些問題解決瞭,解決後再看日志,簡直不能再爽歪歪啦~ 下面對問題以及解決的辦法做個記錄。

問題一

異常描述:No enum constant org.springframework.web.bind.annotation.RequestMethod.Get

項目啟動的時候,後臺日志報如下異常:

原因

根據異常棧,能看出是springfox-swagger-common執行OperationHttpMethodReader.apply()方法是拋出來的,分析日志 RequestMethod.Get 沒有對應的enum,通過檢查Controller中RequestMethod,發現瞭問題所在:

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

導致瞭在獲取enum類型的時候,匹配不上拋出異常。

解決辦法

將httpMethod = “Get” 給成 “GET”即可。其實原來就很好奇為什麼httpMethod後添加的方法名稱是大寫,當時也沒有深入的去研究,正好借此機會知道背後的原因,這樣在開發過程中才能避免很多坑~~

問題二

異常描述:java.lang.NumberFormatException:For input string:””

項目起來後,訪問swagger-ui.html頁面後,接口文檔可以正常展示和使用,不過後臺會出現異常的日志:

原因

看日志,swagger-models這個包中的AbstractSerializableParameter.getExample()方法的時候出現異常瞭,此外還有一條WARN日志,Illegal DefaultValue null for parameter type integer,意思是:有個默認值是空字符串的變量轉換成Integer類型時異常。

通過全局檢索:Illegal DefaultValue,查看如下:

發現example隻判斷的null這種情況,當example如果為空字符串的話,照樣往下執行,Long.valueOf(example)就是拋出異常,奔潰的心,好想把他的源碼改掉呀~

解決辦法

分析瞭下maven的包依賴:

發現swagger-models的版本為 1.5.20,果斷去mvnrepository上去尋找有麼有新的包修復過這個bug:

發現最新的版本 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>

看下源碼:

發現這個bug已經修復啦,哈哈哈哈

以上就是Spring集成Swagger常見錯誤及解決辦法的詳細內容,更多關於Spring集成Swagger常見錯誤的資料請關註WalkonNet其它相關文章!