【异常处理】关于访问swagger-ui报错java.lang.NumberFormatException: For input string: ““的解决方案总结

简介: 【异常处理】关于访问swagger-ui报错java.lang.NumberFormatException: For input string: ““的解决方案总结

一、背景描述

最近新创建了一个Spring boot项目,接口写完之后,通过Swagger-ui访问调试接口,在浏览器中输入http://localhost:8006/swagger-ui.html 可以正常访问

如上图所示,页面显示正常,但是在Idea控制台却报错,如下图:

二、问题原因

2.1 为什么会报错?

java.lang.NumberFormatException: For input string: ""根据报错内容显示,是因为输入了 空字符串"",而空字符串无法转为 Number 类型。

2.2 问题排查

由于这是在通过浏览器访问Swagger时控制台报的错,那么我们就从控制台中的swagger报错信息开始查找,如下图红框内显示,AbstractSerializableParameter.java这个类的getExample方法。

按住键盘的Ctrl 键,点击AbstractSerializableParameter类,进入swagger的源码查看(在抛出异常的位置打上断点,并以Debug模式启动:)

浏览器中刷新swagger文档(重新进入swagger文档),程序停在断点处:

通过断点,我们找到了问题,那么我们就可以做对应的修改了,也就是为对应的属性上加上 example 属性就好了,如下:

2.3 哪种情况会报这样的错?

目前,只发现了把实体属性用作参数,并且参数类型不是application/json 时,就会出现这个错。如下图所示:

2.4 为什么上述情况会报错?

上述情况也就是把实体属性用作参数,并且参数类型不是application/json 时,io.swagger.models.parameters.AbstractSerializableParameter 会实例化参数,也就是通过example的值为属性赋值,如果example没有显示赋值,就是空串"",但是如果实体类用作 application/json 那么就不会走这个方法去实例化参数。

三、解决方案

3.1 第一种解决方案

把项目里面的使用这种属性的情况,也就是在@ApiModelProperty注解里面写上 example = “1”,其实就是给出一个示例,具体写1还是2或3都无所谓,但要注意一点是 example 对应的值必须是Integer类型的。如2.2中一样。

3.2 第二种解决方案

既然存在这种问题,开发者不会没有发现吧,然后就去看了看swagger-models的其他版本,发现在swagger-models:1.5.20版本是springfox-swagger2:2.9.2里面依赖的版本,既然是依赖,那就自己引用了一个swagger-models:1.5.21的版本,然后看看源码,发现 在新的版本中进行了改正。于是我把swagger-models:1.5.20版本排除了,然后单独引入了swagger-models:1.5.21版本。

再次通过浏览器访问swagger-ui发现问题得到解决。

 

 

完结!

 

 


相关文章
|
1天前
|
Java API Apache
|
3天前
|
分布式计算 Java MaxCompute
ODPS MR节点跑graph连通分量计算代码报错java heap space如何解决
任务启动命令:jar -resources odps-graph-connect-family-2.0-SNAPSHOT.jar -classpath ./odps-graph-connect-family-2.0-SNAPSHOT.jar ConnectFamily 若是设置参数该如何设置
|
4天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
16 3
|
6天前
|
SQL Java 数据库连接
打破瓶颈:利用Java连接池技术提升数据库访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,避免了频繁的连接建立和断开,显著提升了数据库访问效率。常见的连接池库包括HikariCP、C3P0和DBCP,它们提供了丰富的配置选项和强大的功能,帮助优化应用性能。
24 2
|
8天前
|
安全 小程序 Java
Java“AccessControlException”报错解决
Java中的“AccessControlException”通常发生在尝试访问受安全策略限制的资源时。解决方法包括:1. 检查安全策略文件(java.policy)配置;2. 确保代码具有足够的权限;3. 调整JVM启动参数以放宽安全限制。
|
16天前
|
Java
Java访问外网图片地址时,如何添加代理?
【10月更文挑战第14天】Java访问外网图片地址时,如何添加代理?
19 2
|
23天前
|
Java
短频快task的java解决方案
本文探讨了Java自带WorkStealingPool的缺陷,特别是在任务中断方面的不足。普通线程池在处理短频快任务时存在锁竞争问题,导致性能损耗。文章提出了一种基于任务窃取机制的优化方案,通过设计合理的窃取逻辑和减少性能损耗,实现了任务的高效执行和资源的充分利用。最后总结了不同场景下应选择的线程池类型。
|
27天前
|
存储 前端开发 Java
浅谈Java中文乱码浅析及解决方案
浅谈Java中文乱码浅析及解决方案
42 0
|
4月前
|
数据可视化 Java API
Spring Boot与Swagger的集成
Spring Boot与Swagger的集成
|
4月前
|
Java API 开发者
在Spring Boot中集成Swagger API文档
在Spring Boot中集成Swagger API文档