【问题标题】:Java Digits Validation [closed]Java数字验证[关闭]
【发布时间】:2013-03-16 19:15:18
【问题描述】:

我在 int 属性中使用验证:

@Digits(integer=6,fraction=0)
private Integer idOrder;

但我希望这个属性正好有 6 位数字。

我该怎么做? (使用JSP+Spring+Hibernate)

【问题讨论】:

  • 这有什么问题?
  • 我想要这个属性有 6 位数字,例如:000000、020123、123452。
  • 你能举一个不应该被允许的整数的例子吗?

标签: java spring validation model-view-controller


【解决方案1】:

由于您需要 6 位数字,我认为您应该对属性使用字符串。如果在某些情况下你需要它作为 int,你做一个

 public int getIdOrder(){ return Integer.parseInt(idOrder);}

在字符串上你可以使用模式验证。应该是这样的:

@Pattern(regexp="\\d{6}")
private String idOrder;

另一种选择,是将 idOrder 保持为 int 并为字符串创建一个 getter:

public String getIdOrgetAsString(){
    String s = "000000" + idOrder;
    return s.substring(s.length() - 6);
}

无论如何,有一些选择。

【讨论】:

    【解决方案2】:

    您确定您的验证有效吗?

    Hibernate 文档说:

    检查属性是否为最多包含整数位和小数位的数字。 1

    6 位数是什么意思?是否支持前导零?或者该数字应该在 100.000 和 999.999 之间。在第一种情况下,我猜你的数字应该是一个字符串(带有@Length),在第二种情况下,我猜你应该使用@Min 和@Max。

    【讨论】:

    • 它不工作。正好 6 位我的意思是 6 个数字,例如:000000、020123、123452、...
    • 在这种情况下,使用带有@Length 的字符串应该可以工作。如果没有,我猜你的验证根本不起作用。还是字符串不适合您的用例?那么,为什么不呢?
    • 我必须使用 int ou Integer。 @Lenght 只适用于字符串。
    • @RenatoShumi An int 从来没有前导数字,所以据我所知,您的代码已经正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    相关资源
    最近更新 更多