验证正整数

xyz*_*xyz 16 java bean-validation

我想只允许数字字段的正整数,包括零.如何使用JSR 303定义此验证.
我试过

  1. @Min(value=0 message = "msg1") - 但它允许浮点值如1.2.

  2. @Digits(fraction = 0, integer = 10, message ="msg2") - 它接受负值.

  3. @Min(value=0, message = "msg1" )
    @Digits(fraction = 0, integer = 10, message ="msg2")-它工作正常,但有时双方的信息,即msg1msg2被显示.

有什么建议?

谢谢!

Rod*_*ujo 34

只需@Min在bean中使用注释:

@Min(value = 0L, message = "The value must be positive")
private Double value;
Run Code Online (Sandbox Code Playgroud)

  • “L”表示显式长整型 (3认同)

jay*_*jay 15

看起来你正在寻找自然数字,我认为你可以使用正则表达式模式来获得所需的输出.就像是

@Pattern(regexp = "[\\s]*[0-9]*[1-9]+",message="msg")

  • 但遗憾的是它不适用于整数 (12认同)
  • @fmchan为整数,是不是`@ Min`的解决方案?我没有在regexp中看到整数的重点 (2认同)

Are*_*efe 12

您也可以将@Positive其用于 int 及其包装器(即整数)。这也适用于 BigInteger。

  • @VijayNandwana 还有“@PositiveOrZero”。https://javaee.github.io/javaee-spec/javadocs/javax/validation/constraints/PositiveOrZero.html (5认同)

Sla*_*hin 7

如果使用休眠验证器,那么你可以创建一个自定义的约束相结合@Min,并@Digits通过使用第三选项@ConstraintComposition(AND)。添加时@ReportAsSingleViolation,只会显示自定义消息。