切換語言為:簡體

訪問Swagger:java.lang.NumberFormatException: For input string: ""

  • 爱糖宝
  • 2024-09-09
  • 2052
  • 0
  • 0

場景

啟動專案,接著訪問Swagger

訪問Swagger:java.lang.NumberFormatException: For input string: ""

依賴版本如下:1.5.20

訪問Swagger:java.lang.NumberFormatException: For input string: ""

檢視控制檯輸出:報錯如下

訪問Swagger:java.lang.NumberFormatException: For input string: ""

排查

  1. 首先看報錯:For input string: "":這個錯誤表明程式嘗試將一個空字串("")轉換成數值型別(如 int 或 double),但由於空字串沒有有效的數字表示形式,導致轉換失敗

  2. 由於不是我們編寫的程式碼,看到報錯也有一種無力感,我們進到原始碼裡面定位問題,按住ctrl+左鍵進入AbstractSerializableParameter這個類,定位到getExample方法

    訪問Swagger:java.lang.NumberFormatException: For input string: ""

  3. 打上斷點,接著瀏覽器重新整理一下進入斷點

    可以看到,AbstractSerializableParameter.javaswagger-models-1.5.20.jar包下面的一個類

    訪問Swagger:java.lang.NumberFormatException: For input string: ""

    在對應的位置打上斷點

    訪問Swagger:java.lang.NumberFormatException: For input string: ""

  4. 斷點除錯

    訪問Swagger:java.lang.NumberFormatException: For input string: ""

原因是在該swagger版本下對於數字型別的欄位沒有設定example值,導致swagger處理時型別轉換異常,算是swagger-models1.5.20的一個小bug

解決

第一種解決方案

手動新增example

  • 透過斷點除錯已經看出了問題,就是example這個欄位為空字串所導致的,那麼修改起來也是非常的簡單,加上對應的example 屬性就好了

    訪問Swagger:java.lang.NumberFormatException: For input string: ""

這種方式的弊端:費時費力

  • 假設你此時已經寫好了專案所有的介面,如果有100個地方需要修改,只能一個一個去修改

第二種解決方案

匯入1.5.21(及之後)版本的swagger-models(推薦)

  • 來,看下依賴

訪問Swagger:java.lang.NumberFormatException: For input string: ""

  • 可以看到swagger-models:1.5.20swagger-spring-boot-starter下面,排除掉這個依賴

訪問Swagger:java.lang.NumberFormatException: For input string: ""

  • 排除了之後,單獨引入swagger-models:1.5.21

訪問Swagger:java.lang.NumberFormatException: For input string: ""

這種方式的好處:不需要修改任何一處程式碼,只需要更改依賴就行。

測試

  • 重新整理下maven,重新訪問下測試,觀察控制檯輸出

總結

總結來說就是1.5.20這個版本下對於數字型別的欄位如果沒有設定example值會導致swagger處理時型別轉換異常,  建議使用第二種方案~升級版本即可

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.