bonjour,
l'utilisation des annotations dans le code java est tres pratique, pour des annotations statiques (attributs statique).
Cependant dans certains cas il s'avere pratique d'utiliser les annotations dans un context dynamic (via api, xml, ...).
Par exemple, l'annotation @Pattern contient un attribut regex.
En utilisant l'annotation dans le code java, l'attribut regex est static.
Si je souhaite mettre dans regex un attribut dynamic (venant d'un property), je suis bloqué.
J'ai trouvé le moyen via l'api d"hibernate-validator de créer dynamiquement une constrainte d'annotation sur un attribut .
Pour info :
Ce code permet donc d'ajouter dynamiquement une annotation @Pattern sur l'attribut email2 de la classe myPojo.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 final MyPojo myPojo = new MyPojo(); final PatternDef pdef = new PatternDef(); pdef.regexp(".+@.+\\.[a-z]+"); final ConstraintMapping mapping = new ConstraintMapping(); mapping.type(MyPojo.class).property("email2", ElementType.FIELD).constraint(pdef).valid(); final HibernateValidatorConfiguration config = Validation.byProvider(HibernateValidator.class).configure(); config.addMapping(mapping); final ValidatorFactory factory = config.buildValidatorFactory(); final Validator v = factory.getValidator();
Je pense qu'il est possible en spring de faire la meme chose .
Mais impossible de trouver comment.
Je pense qu'il faut utiliser la methode setValidationPropertyMap de la classe LocalValidatorFactoryBean.
Une idée ?
Merci
Partager