Illegal DefaultValue null for parameter type integer : For input str

时间:2025-03-20 22:11:22

项目场景:

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

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

: For input string: ""
	at (:65) ~[na:1.8.0_251]
	at (:601) ~[na:1.8.0_251]
	at (:803) ~[na:1.8.0_251]
	at (:412) ~[swagger-models-1.5.:1.5.20]
	at .(Unknown Source) ~[na:na]
	at (:43) ~[na:1.8.0_251]
	at (: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("示例:")
    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("示例:")
    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 : For input string: ""非法的默认值null,对Integer类型。数字格式异常,通过输入“”。但是我没有设置默认值啊。难道没有设置默认值就认为是null? 我尝试手动给Integer类型设置默认值。发现解决了问题。我们本来以为我的String和Date也会发生这种错误的。谁知只有Integer类型有这问题、我觉得应该是Swagger本身的缺陷。不知道人家什么时候解决