Java 验证正整数

Java 验证正整数,java,bean-validation,Java,Bean Validation,我想只允许数字字段的正整数,包括零。如何使用JSR 303定义此验证? 我试过了 @Min(value=0 message=“msg1”)-但它允许像1.2这样的浮点值 @位(分数=0,整数=10,message=“msg2”)-它接受负值 @Min(value=0,message=“msg1”) @位(分数=0,整数=10,message=“msg2”)-它可以正常工作,但有时会同时显示两条消息,即msg1和msg2 有什么建议吗 谢谢 看起来您正在寻找自然数,我认为您可以使用regex

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

  • @Min(value=0 message=“msg1”)
    -但它允许像1.2这样的浮点值

  • @位(分数=0,整数=10,message=“msg2”)
    -它接受负值

  • @Min(value=0,message=“msg1”)

    @位(分数=0,整数=10,message=“msg2”)
    -它可以正常工作,但有时会同时显示两条消息,即
    msg1
    msg2

  • 有什么建议吗


    谢谢

    看起来您正在寻找自然数,我认为您可以使用regex模式获得所需的输出。差不多


    @Pattern(regexp=“[\\s]*[0-9]*[1-9]+”,message=“msg”)
    只需在bean中使用注释
    @Min

    @Min(value = 0L, message = "The value must be positive")
    private Double value;
    

    如果您使用hibernate validator,则可以通过使用
    @ConstraintComposition(and)
    创建一个自定义约束,该约束将第三个选项中的
    @Min
    @Digits
    组合在一起。添加
    @reportAssingeViolation
    时,只会显示一条自定义消息。

    最好对正数使用如下范围注释

    @Range(min = 0l, message = "Please select positive numbers Only")
    
    @Range(min = -9223372036854775808l, max = 0l, message = "Please select Negative numbers Only")
    
    对于负数

    @Range(min = 0l, message = "Please select positive numbers Only")
    
    @Range(min = -9223372036854775808l, max = 0l, message = "Please select Negative numbers Only")
    

    这是上面答案中的一个示例代码

    @已记录
    @最小值(值=0,消息=“添加最小消息”)
    @数字(分数=0,整数=10,消息=“添加数字消息”)
    @目标({ElementType.METHOD,ElementType.FIELD,ElementType.ANNOTATION_TYPE})
    @保留(RetentionPolicy.RUNTIME)
    @约束(validatedBy={})
    @报告违规行为
    public@interface NumberFormatValidator{
    字符串消息()默认为“无效数字”;
    类[]组()默认值{};
    
    类将字段的数据时间从int更改为整数,并使用message.properties文件设置消息

    示例:假设您的字段名是myNumericField,并且属于名为Test的类
  • 更改数据类型:

    • 更改私有int-myNumericField; 到私有整数myNumericField

    • 更新getter和setter以使用/返回整数

  • 创建自定义message.properties文件。 这似乎需要更多的工作,但它是一个更优雅、更可扩展的解决方案,而不是将消息硬编码在注释中

    • 在资源目录下创建message.properties文件

    • 编辑messages.properties并添加以下行

    typeMismatch.Test.myNumericField=请仅使用整数

    记住更改类和字段名的Test和myNumericField

    • 编辑应用程序上下文xml文件,并在标记之前添加以下标记
    
    


  • 另一种解决方案,在我个人看来,更干净、更容易阅读

    @Positive
    @Digits(integer = 5, fraction = 0)
    

    使用以下组合解决了我的问题:

      @NotNull
      @Range(min = 1)
      @JsonProperty("end_range")
      private Integer endRange;
    

    确保使用Integer类而不是int类来处理@NotNull。

    您可以使用
    @Positive
    来处理int及其包装(即Integer)。这也适用于BigInteger。

    您不使用Integer字段的任何特殊原因?@Perception:我正在使用旧应用程序,现在无法更改它。使用自定义约束?-@Paul:JSR中没有约束来处理此问题吗?顺便说一句,如果您使用
    hibernate validator
    ,那么您可以创建自定义约束通过使用
    @ConstraintComposition将第三个选项中的
    @Min
    @Digits
    组合在一起的约束(和)
    。当您添加
    @reportAssingeViolation
    时,只会显示您的自定义消息。但遗憾的是,它无法应用于integer@fmchan对于整数,
    @Min
    不是解决方案吗?我不认为regexp中的整数有什么意义为什么更好?该值中的“L”是什么意思?“L”意思是你为什么在你的例子中选择了5位数字?@Simeon检查邮政编码,但是你可以介绍你想要的号码