Swagger2异常:Illegal DefaultValue null for parameter type integer
是这样的,在一个项目中使用到了Swagger2用作API文档以及接口测试工具,但是在开发完对应的后端接口后,其中有一个是分页查询的接口,大致代码如下:
@ApiOperation("分页查询用户信息")
@GetMapping("/getPage/{pageNum}/{pageSize}")
public Result<Object> getUsersByPage(
@ApiParam(name = "pageNum", value = "当前页码", required = true) // example = "1"
@PathVariable Long pageNum,
@ApiParam(name = "pageSize", value = "每页记录数", required = true) // example = "1"
@PathVariable Long pageSize,
@ApiParam(name = "userVo", value = "条件查询对象", required = false)
@RequestBody(required = false) UserQueryVo userQueryVo){
Page<User> page = new Page<>(pageNum, pageSize);
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(StringUtils.isNotBlank(userQueryVo.getName()), User::getName, userQueryVo.getName())
.eq(userQueryVo.getLevel() != null, User::getLevel, userQueryVo.getLevel())
.ge(userQueryVo.getJoinDateBegin() != null, User::getJoinDate, userQueryVo.getJoinDateBegin())
.le(userQueryVo.getJoinDateEnd() != null, User::getJoinDate, userQueryVo.getJoinDateEnd());
Page<User> pageModel = userService.page(page, queryWrapper);
return Result.success(pageModel);
}
http://localhost:8080/swagger-ui.html
Illegal DefaultValue null for parameter type integer
翻译过来就是:非法默认值参数类型整数的空值
问题分析
通过观察报错抛出的异常是AbstractSerializableParameter
类中的getExample()
方法,源码如下:
@JsonProperty("x-example")
public Object getExample() {
if (this.example == null) {
return null;
} else {
try {
if ("integer".equals(this.type)) {
return Long.valueOf(this.example);
}
if ("number".equals(this.type)) {
return Double.valueOf(this.example);
}
if ("boolean".equals(this.type) && ("true".equalsIgnoreCase(this.example) || "false".equalsIgnoreCase(this.defaultValue))) {
return Boolean.valueOf(this.example);
}
} catch (NumberFormatException var2) {
LOGGER.warn(String.format("Illegal DefaultValue %s for parameter type %s", this.defaultValue, this.type), var2);
}
return this.example;
}
}
不难看出,是类型转换时发生的错误,也就是有个默认值是空字符串的变量转换成Integer类型时异常。
也就是说如果实体属性类型是Integer,就把 example 转为 Long 类型,而example默认为 " " ,导致转换错误。
Swagger 2.9.2
Swagger3.0 从0到1快速入门! (imyjs.cn)
问题解决
通过在网上查找,主要是有两种解决方案。
方案一
在方法参数@ApiParam
注解中,显示指出example 值为某一数值,使其不为“ ”
@ApiParam(name = "pageNum", value = "当前页码", required = true, example = "1") //
@ApiParam(name = "pageSize", value = "每页记录数", required = true, example = "1") //
导入对应的两个jar包,在pom文件中添加如下坐标:
<!--swagger ui-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<!--增加两个配置-->
<!--illegal defaultValue null for param type integer-->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.22</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
<version>1.5.22</version>
</dependency>
然后刷新Maven依赖,重启项目访问,问题解决。
阅读剩余
版权声明:
作者:理想
链接:https://www.imyjs.cn/archives/1050
文章版权归作者所有,未经允许请勿转载。
THE END