Swagger注释不会产生预期的结果

问题描述 投票:2回答:3

当我们使用ApiModelProperty和示例定义字符串属性时,我的团队正在使用swagger注释1.5.14为文档生成swagger文件:

@ApiModelProperty(example="484799")
private String accountNumber;

这会生成输出:

"accountNumber": 484799

是否可以使用示例值双引号生成帐号:

"accountNumber": "484799"

因为在查看示例时,更容易在字符串值和数值之间进行分析。

以下是我们迄今为止尝试的:

  1. 将转义字符设为双引号(example =“\”484799 \“”)
  2. 使用dataType =“java.lang.String”和example参数
  3. 在示例值中留出额外的空间。

我的环境:Java 1.8,swagger注释1.5.14,swagger 2

提前致谢

java spring annotations swagger
3个回答
1
投票

我找到了这个问题的原因,它是在Springfox库中的类Swagger2JacksonModule,有一个基于值的方法检查:

 private boolean isNotJsonString(final String value) throws IOException {
    // strictly speaking, should also test for equals("null") since {"example": null} would be valid JSON
    // but swagger2 does not support null values
    // and an example value of "null" probably does not make much sense anyway
    return value.startsWith("{")                              // object
        || value.startsWith("[")                          // array
        || "true".equals(value)                           // true
        || "false".equals(value)                          // false
        || JSON_NUMBER_PATTERN.matcher(value).matches();  // number
  }

它仅检查值,但忽略在注释上声明的dataType。


0
投票

您可以在@ApiModelProperty中使用'dataType'元素属性。

@ApiModelProperty(datatype= "String", example="484799")
private String accountNumber;

要么

@ApiModelProperty(datatype= "java.lang.String", example="484799")
private String accountNumber;

如果您使用的是Swagger2,那么@Schema就是选项。 https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Annotations#schema


-1
投票

也许你可以在下面以类似的方式使用String.format()

String example="484799"
private String accountNumber = String.format("%s", example)
© www.soinside.com 2019 - 2024. All rights reserved.