webentwicklung-frage-antwort-db.com.de

Bestätigen Sie positive ganze Zahlen

Ich möchte nur positive Ganzzahlen für Zahlenfelder einschließlich Null zulassen. Wie kann ich diese Validierung mithilfe von JSR 303 definieren.
Ich habe es versucht 

  1. @Min(value=0 message = "msg1") - Erlaubt jedoch Float-Werte wie 1,2. 

  2. @Digits(fraction = 0, integer = 10, message ="msg2") - Akzeptiert negative Werte. 

  3. @Min(value=0, message = "msg1" )
    @Digits(fraction = 0, integer = 10, message ="msg2") - Es funktioniert gut, aber manchmal werden beide Meldungen, d. H. msg1 und msg2, angezeigt. 

Irgendwelche Vorschläge? 

Vielen Dank!

15
xyz

Sieht aus, als würden Sie nach natürlichen Zahlen suchen. Ich denke, Sie können das Regex-Muster verwenden, um die gewünschte Ausgabe zu erhalten. So etwas wie 

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

12
jay

Verwenden Sie einfach die Annotation @Min in Ihrem Bean:

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

Wenn Sie den Hibernate-Validator verwenden, können Sie eine benutzerdefinierte Einschränkung erstellen, die @Min und @Digits aus der 3. Option kombiniert, indem Sie @ConstraintComposition(AND) verwenden. Wenn Sie @ReportAsSingleViolation hinzufügen, werden nur benutzerdefinierte Nachrichten angezeigt.

3
Slava Semushin

Es ist besser, die Bereichsanmerkung wie folgt für positive Zahlen zu verwenden

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

Für negative Zahlen

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

Dies ist ein Beispielcode aus der obigen Antwort 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 {};

}

Es verwendet Constraint-Zusammensetzung http://docs.jboss.org/hibernate/validator/4.3/reference/en-US/html_single/#validator-customconstraints-compound und @ReportAsSingleViolation, um beide Meldungen zu vermeiden

0