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é
@Min(value=0 message = "msg1")
- Mais cela permet des valeurs flottantes telles que 1.2.
@Digits(fraction = 0, integer = 10, message ="msg2")
- Il accepte les valeurs négatives.
@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!
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")
Utilisez simplement l'annotation @Min
dans votre bean:
@Min(value = 0L, message = "The value must be positive")
private Double value;
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é.
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")
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