Проверить положительные целые числа - PullRequest
15 голосов
/ 15 февраля 2012

Я хочу разрешить только положительные целые числа для числовых полей, включая ноль. Как я могу определить эту проверку, используя 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") - работает нормально, но иногда отображаются оба сообщения, например msg1 и msg2.

Есть предложения?

Спасибо!

Ответы [ 5 ]

30 голосов
/ 15 января 2017

Просто используйте аннотацию @Min в вашем бобе:

@Min(value = 0L, message = "The value must be positive")
private Double value;
15 голосов
/ 15 февраля 2012

Похоже, вы ищете натуральные числа, я думаю, вы можете использовать шаблон регулярных выражений, чтобы получить желаемый результат.Что-то вроде

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

4 голосов
/ 16 января 2017

Если вы используете hibernate-validator, вы можете создать пользовательское ограничение, которое объединит @Min и @Digits из 3-го варианта с помощью @ConstraintComposition(AND). Когда вы добавите @ReportAsSingleViolation, будет отображаться только пользовательское сообщение.

1 голос
/ 26 июля 2017

Лучше использовать аннотацию диапазона, как показано ниже для положительных чисел

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

Для отрицательных чисел

@Range(min = -9223372036854775808l, max = 0l, message = "Please select Negative numbers Only")
0 голосов
/ 19 июля 2018

Это пример кода из ответа 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, чтобы избежать dsiplay обоих сообщений

...