Java 验证正整数
我想只允许数字字段的正整数,包括零。如何使用JSR 303定义此验证?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
我试过了
@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检查邮政编码,但是你可以介绍你想要的号码