場景
啟動專案,接著訪問
Swagger
依賴版本如下:
1.5.20
檢視控制檯輸出:報錯如下
排查
首先看報錯:For input string: "":這個錯誤表明程式嘗試將一個空字串("")轉換成數值型別(如 int 或 double),但由於空字串沒有有效的數字表示形式,導致轉換失敗
由於不是我們編寫的程式碼,看到報錯也有一種無力感,我們進到原始碼裡面定位問題,按住
ctrl+左鍵
進入AbstractSerializableParameter
這個類,定位到getExample
方法打上斷點,接著瀏覽器重新整理一下進入斷點
可以看到,
AbstractSerializableParameter.java
是swagger-models-1.5.20.jar
包下面的一個類在對應的位置打上斷點
斷點除錯
原因是在該
swagger
版本下對於數字型別的欄位沒有設定example
值,導致swagger
處理時型別轉換異常,算是swagger-models1.5.20
的一個小bug
解決
第一種解決方案
手動新增
example
值
透過斷點除錯已經看出了問題,就是
example
這個欄位為空字串所導致的,那麼修改起來也是非常的簡單,加上對應的example
屬性就好了
這種方式的弊端:費時費力
假設你此時已經寫好了專案所有的介面,如果有100個地方需要修改,只能一個一個去修改
第二種解決方案
匯入
1.5.21
(及之後)版本的swagger-models
(推薦)
來,看下依賴
可以看到
swagger-models:1.5.20
在swagger-spring-boot-starter
下面,排除掉這個依賴
排除了之後,單獨引入
swagger-models:1.5.21
這種方式的好處:不需要修改任何一處程式碼,只需要更改依賴就行。
測試
重新整理下
maven
,重新訪問下測試,觀察控制檯輸出
總結
總結來說就是
1.5.20
這個版本下對於數字型別的欄位如果沒有設定example
值會導致swagger
處理時型別轉換異常, 建議使用第二種方案~升級版本即可