【问题标题】:Spring ConfigurationProperties validation of a Double valueDouble 值的 Spring ConfigurationProperties 验证
【发布时间】:2018-09-04 06:50:12
【问题描述】:

我有一个介于 0 和 1 之间的属性值。 我喜欢 Spring 的 ConfigurationProperties 来验证属性值。

所以在我的ConfigProperties 类中,我添加了@Validated 注释并写了这个:

@Min(0)
@Max(1)
Double fraction;

奇怪的是,验证的工作方式类似于 flooring / roofing 属性文件中的值。

这是我在 conf 文件中放入不同值的结果:

fraction=-2.1 -> Spring 报错并停止(好!)

fraction=2.1 -> Spring 报错并停止(好!)

fraction=-1.5 -> Spring 不报错就启动了(不好!)

fraction=1.5 -> Spring 不报错就启动了(不好!)

我也尝试使用 @Range 注释,但结果相同

【问题讨论】:

  • @Min@Max 适用于整数而不是双精度数。因此 1.5 被转换为 int 并将导致 1 而不是 2.... 即使 1.5 将被舍入为 2 它仍然会失败,例如 1.13 等值。

标签: spring-boot configurationproperties


【解决方案1】:

所以这里是解决方案as described here:

   @DecimalMax("1.0") @DecimalMin("0.0")
    Double fraction;

【讨论】:

  • 虽然这可能有效,但根据文档@DecimalMax@DecimalMin 也不支持double
【解决方案2】:

正如@Min@Max 的文档(清楚地)所述。这同样适用于@DecimalMin@DecimalMax

请注意,由于舍入错误,不支持 doublefloat(某些提供商可能会提供一些近似支持)

您可以改用BigDecimalBigInteger

【讨论】:

    猜你喜欢
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    相关资源
    最近更新 更多