Java Bean Validation (JSR303) contraintes impliquant une relation entre plusieurs propriétés du bean
Dire que j'ai suivantes simple java bean:
class MyBean {
private Date startDate;
private Date endDate;
//setter, getters etc...
}
Est-il un mécanisme dans la JSR 303 pour créer un validateur personnalisé qui permet de valider la contrainte que la date de début doit être avant la date de fin?
Il me semble être un bon cas d'utilisation, mais je ne trouve pas d'exemples de ce genre de plusieurs biens relationsship contrainte.
- Il semble que quelqu'un a posté un exemple complet dans son blog: soadev.blogspot.de/2010/01/jsr-303-bean-validation_29.html
Vous devez vous connecter pour publier un commentaire.
Je ne peux penser à quelques choses à essayer.
Vous pouvez créer un
Constraint
avec un objectif de le type lui-même avec un programme de validation:Vous pourriez encapsuler une plage de dates dans un type et valider:
Vous pouvez ajouter une propriété simple qui effectue le contrôle:
Si vous utilisez Hibernate Validator dans la version 4.1 ou une version ultérieure, vous pouvez utiliser le @ScriptAssert contrainte avec un script ou une expression de la langue pour exprimer ce genre de contrainte. À l'aide de JavaScript par votre exemple, devrait ressembler à ceci:
Vous pouvez obtenir un encore plus compact de la syntaxe par créer une contrainte pour le langage de script de votre choix:
La réponse est un niveau de classe validateur. Vous pouvez définir des contraintes que vous pouvez placer sur la classe d'entité. Au moment de la validation, vous obtenez passa toute instance dans la méthode isValid (). Vous pouvez ensuite comparer les deux dates les uns contre les autres. Voir aussi les Hibernate Validator la documentation.
@AssertMethodAsTrue - réutilisable contrainte d'annotation qui s'étend sur plusieurs propriétés.
Car il n'y a aucun moyen d'accéder à la fève de la JSR 303 validateur, ce n'est pas possible.
Une solution de contournement serait de fournir votre propre
ConstraintValidatorContext
et l'étendre avec une référence à la fève vous êtes en train de valider. Mais je ne suis pas sûr de savoir si vous pouvez modifier/remplacer les respectifs usine.