Проверка положительных целых чисел

Я хочу разрешить только положительные целые числа для числовых полей, включая нуль. Как я могу определить эту проверку с помощью JSR 303.
Я пытался

  1. @Min(value=0 message = "msg1") - Но это позволяет значения float, такие как 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.

Какие-либо предложения?

Благодарю!

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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

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

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

Ответ 5

Это пример кода из ответа fooobar.com/info/4651956/... выше

@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 {};

}

Он использует Constraint-композицию http://docs.jboss.org/hibernate/validator/4.3/reference/en-US/html_single/#validator-customconstraints-compound и @ReportAsSingleViolation чтобы избежать dsiplay обоих сообщений