• (转)springboot整合swagger报错——AbstractSerializableParameter : Illegal DefaultValue null for parameter type


    问题描述
    在springboot项目中整合swagger,总是会报错
    AbstractSerializableParameter: Illegal DefaultValue null for parameter type java.lang.NumberFormatException: For input string: "" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[na:1.8.0_171]

    根据错误信息,得知问题在于Swagger每一个@ApiModelProperty注解里example属性都会进行非空判断.但是,它在判断的语句里只判断了null的情况,没有判断是空字符串的情况,所以解析数字的时候就会报这个异常。感觉应该是官方的bug

    这个异常的报错是在swagger-models的包下,springfox-swagger2默认整合的是swagger-models的1.5.20版本,其实官方在后续的版本中已经解决了这个bug,这用引用比1.5.20更高的版本就可以了

    解决

    <!--      swagger      -->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>2.9.2</version>
                <!--Swagger异常:AbstractSerializableParameter : Illegal DefaultValue null for parameter type integer
                    由于实体类使用@ApiModelProperty时,example属性没有赋值导致的,会进行非空判断
                    解决: 排除后,上传更高版本
                -->
                <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>
    
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>2.9.2</version>
            </dependency>

    swagger-models的1.5.20关于这个问题的源码

    @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-models的1.5.21关于这个问题解决后的源码

        @JsonProperty("x-example")
        public Object getExample() {
            if (this.example != null && !this.example.isEmpty()) {
                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;
            } else {
                return this.example;
            }
        }

    其实就是加了对example的""空字符串判断

    转自:https://blog.csdn.net/qq_42937522/article/details/106208849

  • 相关阅读:
    allure2生成html报告
    H5如何测试?
    请描述什么是性能测试、什么是负载测试、什么是压力测试?
    Web/App端自动化测试对比
    如果给你一台电梯,请问你如何测试它
    PC、APP、H5三端测试的相同与不同
    App测试工具选择
    app测试和web测试的区别
    unittest单元测试框架详解
    Jmeter之逻辑控制器(Logic Controller)
  • 原文地址:https://www.cnblogs.com/tangmj/p/15960303.html
Copyright © 2020-2023  润新知