【异常处理】关于访问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发现问题得到解决。

 

 

完结!

 

 


相关文章
|
22天前
|
Java 测试技术 开发者
Java零基础-indexOf(String str)详解!
【10月更文挑战第14天】Java零基础教学篇,手把手实践教学!
108 65
|
7天前
|
人工智能 监控 数据可视化
Java智慧工地信息管理平台源码 智慧工地信息化解决方案SaaS源码 支持二次开发
智慧工地系统是依托物联网、互联网、AI、可视化建立的大数据管理平台,是一种全新的管理模式,能够实现劳务管理、安全施工、绿色施工的智能化和互联网化。围绕施工现场管理的人、机、料、法、环五大维度,以及施工过程管理的进度、质量、安全三大体系为基础应用,实现全面高效的工程管理需求,满足工地多角色、多视角的有效监管,实现工程建设管理的降本增效,为监管平台提供数据支撑。
24 3
|
13天前
|
Java API Apache
|
23天前
|
Java 测试技术 开发者
Java零基础-indexOf(String str)详解!
【10月更文挑战第13天】Java零基础教学篇,手把手实践教学!
38 1
|
27天前
|
安全 Java 测试技术
Java零基础-StringBuffer 类详解
【10月更文挑战第9天】Java零基础教学篇,手把手实践教学!
24 2
|
1月前
|
IDE Java 开发工具
Java“未封闭的 String 表达式”怎么解决
要解决Java中的“未封闭的 String 表示”问题,需检查并修正字符串字面量,确保每个字符串被正确地用双引号括起来。若字符串跨越多行,可使用字符串连接操作符(+)或引入文本块(JDK 13 及以上版本)。这能帮助避免语法错误,并使代码更整洁易读。
|
1月前
|
Java
短频快task的java解决方案
本文探讨了Java自带WorkStealingPool的缺陷,特别是在任务中断方面的不足。普通线程池在处理短频快任务时存在锁竞争问题,导致性能损耗。文章提出了一种基于任务窃取机制的优化方案,通过设计合理的窃取逻辑和减少性能损耗,实现了任务的高效执行和资源的充分利用。最后总结了不同场景下应选择的线程池类型。
|
1月前
|
存储 安全 Java
【一步一步了解Java系列】:认识String类
【一步一步了解Java系列】:认识String类
24 2
|
30天前
|
JavaScript 索引
Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案
Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案
108 0
|
1月前
|
存储 前端开发 Java
浅谈Java中文乱码浅析及解决方案
浅谈Java中文乱码浅析及解决方案
71 0