web-dev-qa-db-fra.com

Hibernate Validator - @Length - Comment spécifier un message séparé pour min et max?

J'utilise le validateur Hibernate pour la validation de formulaire dans mon application web. J'utilise l'annotation @Length pour mon attribut String comme suit:

@Length(min = 5, message = "The field must be at least 5 characters")
private String myString;

Cependant, j'ai besoin d'afficher un message différent si la chaîne dépasse 50 caractères. Existe-t-il un moyen d'utiliser le validateur @Length prêt à l'emploi pour ce faire? Un exemple de ce que j'aimerais faire (le compilateur ne me le permet pas) est le suivant:

@Length(min = 5, message = "The field must be at least 5 characters")
@Length(max = 50, message = "The field must be less than 50 characters")
private String myString;

J'ai essayé @Max et @Min et ils ne font pas ce que je veux. Toute contribution serait vivement appréciée!

19
javagruffian

Vous pouvez spécifier plusieurs @Length contraintes sur un élément en utilisant le --- annotation de liste (qui est défini pour chaque type de contrainte dans Bean Validation/Hibernate Validator) comme ceci:

@List({
    @Length(min = 5, message = "The field must be at least 5 characters"),
    @Length(max = 50, message = "The field must be less than 50 characters")
})
private String myString;

Btw. Je recommande de préférer @ Size tel que défini par l'API de validation de bean sur @Length pour des raisons de portabilité.

46
Gunnar

Si vous utilisez le Java standard javax.validation.constraint.Size, vous pouvez obtenir la même chose de cette façon:

@Size.List ({
    @Size(min=8, message="The field must be at least {min} characters"),
    @Size(max=60, message="The field must be less than {max} characters")
})
private String myString;

Notez que vous pouvez éviter de coder en dur la taille du champ en utilisant l'interpolation des messages.

9
Chanoch

Selon la documentation, vous pouvez utiliser @Length(min=, max=), avec un seul message. Ensuite, changez simplement votre message en "Le champ doit contenir entre 5 et 50 caractères"

7
atrain