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版本,其他版本好像不存在这个问题,之前我都是用的Swagger 3版本的,具体使用看这里: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
二维码
Swagger2异常:Illegal DefaultValue null for parameter type integer
问题背景 是这样的,在一个项目中使用到了Swagger2……
<<上一篇
下一篇>>
文章目录
关闭
目 录