swagger2打開doc頁面時報錯


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

我是用的swagger2版本是2.9.2,而此版本的swagger2引用的swagger基礎包版本是1.5.20

[INFO] +- io.springfox:springfox-swagger2:jar:2.9.2:compile
[INFO] |  +- io.swagger:swagger-annotations:jar:1.5.20:compile
[INFO] |  +- io.swagger:swagger-models:jar:1.5.20:compile

如果在Integer類型的屬性上使用@ApiModelProperty注解,並且沒有寫example默認值,就會報如下錯誤:

2019-10-10 17:28:58.214  WARN 7037 --- [http-nio-8011-exec-129] i.s.m.p.AbstractSerializableParameter    Illegal DefaultValue null for parameter type integer
java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Long.parseLong(Long.java:601)
    at java.lang.Long.valueOf(Long.java:803)
    at io.swagger.models.parameters.AbstractSerializableParameter.getExample(AbstractSerializableParameter.java:412)
    at sun.reflect.GeneratedMethodAccessor794.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)

從日志來看,我們可以到類AbstractSerializableParameter,下面的方法getExample 一探究竟。

swagger-models-1.5.20.jar版本的getExample源碼如下:this.example是String類型,默認是"", 所以在執行到 return Long.valueOf(this.example) 這行代碼是就會報錯。

@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;
    }
}

 

解決方法有2個:

1. 把Integer的屬性@ApiModelProperty注解里都加上example,內容必須可以轉為數字,比如:@ApiModelProperty(value = "年齡", example = "20")

2. 把swagger版本升級為1.5.21,下面是swagger-models-1.5.21.jar的源碼:

@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;
    }
}

增加了!this.example.isEmpty() 的判斷,isEmply()的源碼如下:

public boolean isEmpty() {
    return value.length == 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM