场景
启动项目,接着访问
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
处理时类型转换异常, 建议使用第二种方案~升级版本即可