Swagger2 | 06. 使用swagger2时,报 For input string:““

本文探讨了Swagger2启动时因Integer默认值导致的报错,介绍了问题的常见原因,重点在于@ApiImplicitParam注解中example属性的处理。提供了解决方案,包括降级版本和修改Swagger2依赖,确保使用正确模型版本来避免此类bug。
摘要由CSDN通过智能技术生成

1. 发现问题

在启动项目后,打开Swagger2,就会看到控制台疯狂报错,基本都是For input string:""

2. 分析问题

2.1. 常见原因

这种错误在平时写代码时很常见。
常见情况是:后台接收参数的类型限定为int,但用户什么都没输入

试图将"“解析成int,便会报出这样的错误
原因在于int的默认值是0,对于字符串”"无法解析

解决办法:接收参数的类型改成Integer
Integer是封装过的int类,默认值是null而不是0

2.2. Swagger2为什么报这个错?

报错的原因是 尝试将"“解析成int
但自己的代码明明没有任何地方写到了”"
百度以后,发现问题出在example属性

报错原因总结如下:
(1) @ApiModelProperty或@ApiImplicitParam注解中没有写example属性,而这个注解对应的属性类型恰好是Integer。

(2) 由于Integer的默认值是"",在没有写example时,example的默认值被设置成了""

(3) 但Swagger2只会解析int,于是在尝试将""解析成int的时候,便疯狂报错。每有一个这样的注解,便报一次这样的错误。

2.3. 解决方案

2.3.1. 降级

据说可以降级解决,好像说2.8.0就可以了,但我没有去尝试
毕竟大部分人都选择2.9.2,想必该版本有它的好处

2.3.2. 修改依赖

其实说到底,这是Swagger2的一个BUG。
Swagger2在2.9.2版本及以后,依赖的swagger-models版本都默认为1.5.20
这个版本就存在这样的BUG,但在1.5.21版本就修改了这个BUG
将Maven中设置Swagger2依赖的代码,改成如下:

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
            <exclusions>
                <exclusion>
                    <groupId>io.swagger</groupId>
                    <artifactId>swagger-annotations</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>io.swagger</groupId>
                    <artifactId>swagger-models</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>1.5.21</version>
        </dependency>
        
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-models</artifactId>
            <version>1.5.21</version>
        </dependency>

注意只需要替换掉Swagger2依赖的代码
也就是这个:

		<dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>

问题便可以解决

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值