web-dev-qa-db-fra.com

Valider les entiers positifs

Je souhaite autoriser uniquement les nombres entiers positifs pour les champs numériques, y compris zéro.Comment puis-je définir cette validation à l'aide de JSR 303?.
J'ai essayé

  1. @Min(value=0 message = "msg1") - Mais cela permet des valeurs flottantes telles que 1.2.

  2. @Digits(fraction = 0, integer = 10, message ="msg2") - Il accepte les valeurs négatives.

  3. @Min(value=0, message = "msg1" )
    @Digits(fraction = 0, integer = 10, message ="msg2") - Cela fonctionne bien, mais parfois les messages i.e. msg1 et msg2 sont affichés.

Aucune suggestion?

Merci!

15
xyz

On dirait que vous recherchez des nombres naturels, je pense que vous pouvez utiliser le modèle regex pour obtenir le résultat souhaité. Quelque chose comme

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

12
jay

Utilisez simplement l'annotation @Min dans votre bean:

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

Si vous utilisez hibernate-validator, vous pouvez créer une contrainte personnalisée associant @Min et @Digits à partir de la troisième option à l'aide de @ConstraintComposition(AND). Lorsque vous ajouterez @ReportAsSingleViolation, seul le message personnalisé sera affiché.

3
Slava Semushin

Il est préférable d'utiliser l'annotation de plage comme ci-dessous pour les nombres positifs

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

Pour les nombres négatifs

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

Ceci est un exemple de code tiré de la réponse https://stackoverflow.com/a/41675990/258544 ci-dessus

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

}

Il utilise la composition de contrainte http://docs.jboss.org/hibernate/validator/4.3/reference/en-US/html_single/#validator-customconstraints-compound et @ReportAsSingleViolation pour éviter d'afficher deux messages

0
Francisco Quiñones