我想只允许数字字段的正整数,包括零。如何使用JSR 303定义此验证。
我试过了
@Min(value=0 message = "msg1")
- 但它允许浮点值,如1.2。
@Digits(fraction = 0, integer = 10, message ="msg2")
- 它接受负值。
@Min(value=0, message = "msg1" )
@Digits(fraction = 0, integer = 10, message ="msg2")
- 工作正常,但有时会显示msg1
和msg2
这两个消息。
有什么建议吗?
谢谢!
答案 0 :(得分:29)
只需在bean中使用注释@Min
:
@Min(value = 0L, message = "The value must be positive")
private Double value;
答案 1 :(得分:15)
看起来您正在寻找自然数字,我认为您可以使用正则表达式模式来获得所需的输出。像
这样的东西 @Pattern(regexp = "[\\s]*[0-9]*[1-9]+",message="msg")
答案 2 :(得分:3)
如果您使用hibernate-validator,那么您可以使用@Min
创建一个自定义约束,该约束通过第3个选项合并@Digits
和@ConstraintComposition(AND)
。如果您要添加@ReportAsSingleViolation
,则只会显示自定义消息。
答案 3 :(得分:1)
最好使用下面的范围注释作为正数
@Range(min = 0l, message = "Please select positive numbers Only")
对于负数
@Range(min = -9223372036854775808l, max = 0l, message = "Please select Negative numbers Only")
答案 4 :(得分:0)
这是上面答案https://stackoverflow.com/a/41675990/258544中的示例代码
@Documented
@Min(value=0, message = "add a min msg" )
@Digits(fraction = 0, integer = 10, message ="add a digit msg")
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {})
@ReportAsSingleViolation
public @interface NumberFormatValidator {
String message() default "invalid number";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
它使用约束组合http://docs.jboss.org/hibernate/validator/4.3/reference/en-US/html_single/#validator-customconstraints-compound和@ReportAsSingleViolation
来避免同时播放两条消息
答案 5 :(得分:0)
将字段的数据时间从int更改为Integer,并使用message.properties文件将其设置为消息
更改数据类型:
更改 private int myNumericField; private Integer myNumericField;
更新getter和setter以使用/返回Integer
创建定制的message.properties文件。 这看起来似乎需要更多工作,但它是一种更优雅,更可扩展的解决方案,而不是将消息硬编码在注释中
在资源目录
编辑 messages.properties 并添加以下行
typeMismatch.Test.myNumericField=Please use integers only
记住要为您的类和字段名称更改 Test 和 myNumericField
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames" value="resources/messages" />
</bean>
答案 6 :(得分:0)
另一种解决方案,以我个人的观点,它更干净,更易于阅读。
@Positive
@Digits(integer = 5, fraction = 0)
答案 7 :(得分:0)
使用以下组合为我解决了这个问题:
@NotNull
@Range(min = 1)
@JsonProperty("end_range")
private Integer endRange;
请确保使用Integer类而不是int来使@NotNull正常工作。
答案 8 :(得分:0)
如果您可以将其更改为BigInteger
,则可以使用@Positive
注释
更新:@Positive
也适用于int及其包装器(即Integer)