swagger报错 java.lang.NumberFormatException: For input string: ""

 

swagger报错如下:

java.lang.NumberFormatException: For input string: ""
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[na:1.8.0_171]
	at java.lang.Long.parseLong(Long.java:601) ~[na:1.8.0_171]
	at java.lang.Long.valueOf(Long.java:803) ~[na:1.8.0_171]
	at io.swagger.models.parameters.AbstractSerializableParameter.getExample(AbstractSerializableParameter.java:412) ~[swagger-models-1.5.20.jar:1.5.20]
	at sun.reflect.GeneratedMethodAccessor137.invoke(Unknown Source) ~[na:na]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_171]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_171]
	at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:664) [jackson-databind-2.8.11.2.jar:2.8.11.2]
	at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:689) [jackson-databind-2.8.11.2.jar:2.8.11.2]
	at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155) [jackson-databind-2.8.11.2.jar:2.8.11.2]
	at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:119) [jackson-databind-2.8.11.2.jar:2.8.11.2]
	at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:79) [jackson-databind-2.8.11.2.jar:2.8.11.2]

方案一:

  1》原本的model类

@ApiModel(description = "订单查询请求数据")
public class Order implements Serializable {
    @ApiModelProperty(value = "订单ID")
    private Integer id;
}

2》异常分析

Illegal DefaultValue null for parameter type integer`和`NumberFormatException: For input string: ""

 翻译:有个默认值是空字符串的变量转换成Integer类型时异常。

at io.swagger.models.parameters.AbstractSerializableParameter.getExample(AbstractSerializableParameter.java:412) ~[swagger-models-1.5.20.jar:1.5.20]

点进去AbstractSerializableParameter.java:412可以看到 

if (BaseIntegerProperty.TYPE.equals(type)) {
	return Long.valueOf(example);
}

 就是说如果实体属性类型是Integer,就把example转为Long类型,而example默认为"",导致转换错误。

3》解决:

实体类中,Integer类型的属性加@ApiModelProperty时,必须要给example参数赋值,且值必须为数字类型。(比较麻烦

@ApiModel(description = "订单查询请求数据")
public class Order implements Serializable {
    @ApiModelProperty(value = "订单ID",example = "123")
    private Integer id;
}

方案二:

由方案一查看源码 报错位置:

if (BaseIntegerProperty.TYPE.equals(type)) {
	return Long.valueOf(example);
}

若将源码中的if (BaseIntegerProperty.TYPE.equals(type))改为if (BaseIntegerProperty.TYPE.equals(type) && (example == null || example.isEmpty()))就可以解决问题。我下载并修改了源码,将其打包后覆盖了maven仓库的jar包,这样项目代码不需要任何修改就可以解决问题。

同时,我又查看了v1.5.21的代码 ,源码的修改是一样的。其实也可以排除1.5.20版本的swagger-models.jar,引入1.5.21版本的swagger-models.jar。但是考虑到可能由于代码改动较大引发其他问题,因此个人感觉还是在1.5.20版本代码微调最好。

最后把修复过的jar包下载链接放在这里,下载后替换本地仓库对应的文件,然后项目重新导入jar包即可。
 

然后将两个文件复制进去覆盖原文件。

jar包下载地址:https://pan.baidu.com/s/1UhOAD2IgkORZ3OBGwmu70Q  提取码:8hdw

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值