JSR 303 - Composition Constraint
-
12-10-2019 - |
Question
Comment puis-je exécuter un ConstraintValidator
dans un ConstraintValidator
?
J'ai un @NotEmpty
personnalisé et un ConstraintValidator
personnalisé est pour chaque type, et il fonctionne très bien.
Maintenant, je veux créer une contrainte au niveau de la classe qui vérifie au moins l'un des champs spécifiés n'est pas vide en utilisant les ConstraintValidator
sur mesure, je l'ai déjà est. La partie de contrainte (de @ClassNotEmpty
) est fait, mais le problème est la mise en œuvre de ConstraintValidator
. comment puis-je obtenir une instance de ConstraintValidator
pour une contrainte donnée? i.e..
isValid(Object value, ConstraintValidatorContext constraintValidatorContext) {
String[] fieldValues = getFieldValues(value, this.classNotEmpty.fieldNames());
for (String fieldValue : fieldValues) {
<What do I put here?>.isValid(fieldValue, constraintValidatorContext);
}
}
Est-il possible de le faire sans sortir de la routine de validation à une classe d'aide?
BTW, je suis avec Spring et Hibernate Validator.
La solution
Après d'autres recherches, il semble qu'il n'y a pas de solution connue pour obtenir une instance de ConstraintValidator
pour une contrainte donnée, portable ou non. Une classe d'aide semble être la seule façon de le faire.
Autres conseils
Je n'ai pas l'information devant moi, mais je me souviens avoir lu quelque chose sur validateurs qui se composent d'autres validateurs. Donc, si vous avez deux validateurs A et B. Vous pouvez définir un troisième « C » qui se compose des deux autres. Hunt à travers le Doco, vous devriez le trouver.
Juste fait une recherche, lisez ceci: http://docs.jboss.org/hibernate/stable/validator/reference/en-US/html/validator-customconstraints.html#validator-customconstraints-compound
Il peut être ce que vous recherchez.