【问题标题】:How to use @Size validation while using Float field with javax library?使用带有 javax 库的 Float 字段时如何使用 @Size 验证?
【发布时间】:2014-06-21 17:28:22
【问题描述】:

我正在尝试使用带有 Float 数据类型的最大大小验证和 javax 验证。这是示例

@NotNull
@Size(min = 5, max = 10)
public Float getPhone(){

}

但我收到错误消息,我无法对浮点数据类型使用大小验证。有什么想法吗?

【问题讨论】:

    标签: java validation hibernate-validator


    【解决方案1】:

    @Size 不适用于浮点类型。引用约束的javadocs:

    /**
     * The annotated element size must be between the specified boundaries (included).
     * <p/>
     * Supported types are:
     * <ul>
     *     <li>{@code CharSequence} (length of character sequence is evaluated)</li>
     *     <li>{@code Collection} (collection size is evaluated)</li>
     *     <li>{@code Map} (map size is evaluated)</li>
     *     <li>Array (array length is evaluated)</li>
     * </ul>
     * <p/>
     * {@code null} elements are considered valid.
     *
     */ 
    

    所以这个约束实际上是关于字符串或集合的大小。您可以编写自己的浮点验证器并通过 xml 注册 - 请参阅 http://beanvalidation.org/1.1/spec/#xml-mapping-constraintdefinition

    但是,我建议不要这样做,因为在您要使用它的上下文中谈论“大小”是没有意义的。

    您可以使用@Min@Max,但由于舍入问题,并非所有提供程序都支持浮点数据类型。

    查看您的示例,您似乎想存储一个电话号码。你为什么会选择一个浮点数作为开始?

    【讨论】:

    • 谢谢@Hardy。我知道为了存储电话号码,我不应该使用浮点数据类型。但是我正在开发一个数据库设计不是由我完成的系统。并且 db 中有电话号码的 decimal(10,0) 数据类型。现在我从java代码生成了我的bean。 (从数据库动态)。所以它是带十进制的浮点映射(以db为单位)。有什么解决办法吗?
    • 哪种数据类型更适合电话号码?即使 Double 也不会假设 @size 验证。
    • 如果数据库列是十进制类型,您的 Java 属性应该是 java.math.BigDecimal 类型。 SQL decimal 和 java.math.BigDecimal 都将数字表示为数字序列,而 float 和 double 则“不精确”,因为它们将数字表示为 m×2ⁿ。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 2021-07-29
    • 2019-03-03
    • 1970-01-01
    相关资源
    最近更新 更多