Illegal DefaultValue null for parameter type integer java.lang.NumberFormatException: For input str

项目场景:

每次访问Swagger初始页面,发现程序有报错

2020-08-31 13:24:31,870  WARN 16972 --- [nio-9001-exec-2] i.s.m.p.AbstractSerializableParameter    : Illegal DefaultValue null for parameter type integer

java.lang.NumberFormatException: For input string: ""
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[na:1.8.0_251]
	at java.lang.Long.parseLong(Long.java:601) ~[na:1.8.0_251]
	at java.lang.Long.valueOf(Long.java:803) ~[na:1.8.0_251]
	at io.swagger.models.parameters.AbstractSerializableParameter.getExample(AbstractSerializableParameter.java:412) ~[swagger-models-1.5.20.jar:1.5.20]
	at sun.reflect.GeneratedMethodAccessor115.invoke(Unknown Source) ~[na:na]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_251]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_251]

解决方案:

手动给被A@ApiModelProperty注解修饰integer类型设置一个默认值。例如我的vo改成如下 @ApiModelProperty(value = "类型:1集团生产环境2集团测试环境3深圳生产环境4深圳测试环境",example = "1")

/**
 * @Author: wbdengtt
 * @Date: 2020/7/21 13:30
 */
@Data
public class TrackLogVO {
    @ApiModelProperty("接口名字,支持模糊匹配")
    String fullName;
    @ApiModelProperty("示例:GET.iOS.sz")
    String methodName;
    @ApiModelProperty("忽略字段,逗号分隔 示例:Elapsed,Timestamp,Machine")
    String ignores;
    @ApiModelProperty("开始时间:yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    Date startDate;
    @ApiModelProperty("结束时间:yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    Date endDate;
    @ApiModelProperty(value = "类型:1集团生产环境2集团测试环境3深圳生产环境4深圳测试环境",example = "1")
    Integer type;
}

问题描述:

之前使用没有报错的,然后因为我想给Swagger加一些注释。让访问的人知道我的各个字段是做什么的。我就给了我的Vo字段添加了@ApiModelProperty进行注释.后序发现启动的时候有了报错。但是不影响使用。可以不理会。但是对于我这种强迫症是肯定要解决的

/**
 * @Author: wbdengtt
 * @Date: 2020/7/21 13:30
 */
@Data
public class TrackLogVO {
    @ApiModelProperty("接口名字,支持模糊匹配")
    String fullName;
    @ApiModelProperty("示例:GET.iOS.sz")
    String methodName;
    @ApiModelProperty("忽略字段,逗号分隔 示例:Elapsed,Timestamp,Machine")
    String ignores;
    @ApiModelProperty("开始时间:yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    Date startDate;
    @ApiModelProperty("结束时间:yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    Date endDate;
    @ApiModelProperty("类型:1集团生产环境2集团测试环境3深圳生产环境4深圳测试环境")
    Integer type;
}

原因分析:

我是添加了@APIModelProperty才报错的。我把注解去掉,报错就没有了。那么很明显是这个注解的问题。
然后又因为不影响使用。而且从报错代码里看。没有一行是指向我们写的代码。多半是这个Swagger自身可能有哪些缺陷导致的。
然后分析:Illegal DefaultValue null for parameter type integer java.lang.NumberFormatException: For input string: ""非法的默认值null,对Integer类型。数字格式异常,通过输入“”。但是我没有设置默认值啊。难道没有设置默认值就认为是null? 我尝试手动给Integer类型设置默认值。发现解决了问题。我们本来以为我的String和Date也会发生这种错误的。谁知只有Integer类型有这问题、我觉得应该是Swagger本身的缺陷。不知道人家什么时候解决

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值