如何在Swagger规范中表示十进制浮点数?

18

我希望在我的API文档中用2位小数和1位小数表示十进制数。 我正在使用Swagger 2.0,规范中是否有内置定义类型或任何其他“round”参数,还是我唯一的选择是使用“x-”扩展?

2个回答

31

OpenAPI规范 (前身为Swagger) 使用JSON Schema 的子集来描述数据类型。

如果参数以数字形式传递,您可以尝试使用multipleOf,如此问答所建议的:

type: number
multipleOf: 0.1     # up to 1 decimal place,  e.g. 4.2
# multipleOf: 0.01  # up to 2 decimal places, e.g. 4.25

然而,由于浮点数的运算精度问题(相关讨论),multipleOf 验证可能不够可靠。


如果您的数字以字符串形式传递,则可以为所需的数字格式指定一个正则表达式 pattern

type: string
pattern: your_regex


无论如何,您也可以在description中口头记录任何限制。


1
在Java中,type: number将转换为BigDecimal - Hariom Yadav
@Hariom Yadav,你指的是哪个Java库? - John Vandenberg

0
我自己没有尝试过,但你可以尝试创建一个Java包装器,用你想要的注解(在这种情况下,@Digits可能会有帮助)注释包装字段,使用lombok提供@Getter和@Setter,然后使用importMappings和typeMappings来使用你的自定义包装器。
例如:
@Getter
@Setter
public class MyWrapper {
    @Digits(integer = 1, fraction = 8)
    private BigDecimal bigDecimal;
}

在pom.xml文件中,使用openapi-generator-maven-plugin
    <importMappings>
        <importMapping>MyWrapper=my.package.MyWrapper</importMapping>
    </importMappings>
    <typeMappings>
        <typeMapping>number+digits=MyWrapper</typeMapping>
    </typeMappings>                             

在你的yaml文件中:
    properties:
      myProperty:
        type: number
        format: digits

这并没有真正回答问题。如果你有其他问题,你可以点击提问来提问。如果你想在这个问题有新的回答时收到通知,你可以关注这个问题。一旦你有足够的声望,你也可以添加悬赏来吸引更多的关注。- 来自评论 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接