有很多小伙伴在用swagger 升级到2.9.x版本后出现以下错误
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]
这个问题出现的原因在于你可能使用类似下面的注解
@ApiImplicitParam(name = "page", value = "页码", required = true, paramType = "path", dataType = "int")
page 这个参数是必须的,而且它是int类型的,swagger会将该参数的默认值转为Object类型再转换为int类型。因为 example 你没有赋值,这样就会出现类型转换错误以下是源码。同样如果你输入的是字符串类型同样也会报错
@JsonProperty("x-example")
public Object getExample() {
if (example == null) {
return null;
}
try {
if (BaseIntegerProperty.TYPE.equals(type)) {
return Long.valueOf(example);
} else if (DecimalProperty.TYPE.equals(type)) {
return Double.valueOf(example);
} else if (BooleanProperty.TYPE.equals(type)) {
if ("true".equalsIgnoreCase(example) || "false".equalsIgnoreCase(defaultValue)) {
return Boolean.valueOf(example);
}
}
} catch (NumberFormatException e) {
LOGGER.warn(String.format("Illegal DefaultValue %s for parameter type %s", defaultValue, type), e);
}
return example;
}
所以在给参数写swagger文档时最好给定默认值,避免出现类似的问题,如下所示
@ApiImplicitParam(name = "page", value = "页码", required = true, paramType = "path", dataType = "int",example = "1")
注意这个example 他就是问题所在