2017-10-13 4 views
1

this est mon exemple d'application avec ses test. J'ai défini certaines contraintes sur repository comme @NotEmpty. Quand je veux appeler ce dépôt que je reçois après la délivrancemise en veille prolongée erreur validateur lorsque @NotEmpty utilisé le type de retour

javax.validation.ConstraintDeclarationException: HV000141: The constraint org.hibernate.validator.constraints.NotEmpty used ConstraintTarget#IMPLICIT where the target cannot be inferred.

Ai-je besoin de mettre en œuvre validateur pour @NotEmpty ou est-ce un bogue dans mise en veille prolongée ou mon application printemps-boot?

note lorsque je supprime @NotEmpty à partir du type de retour, cela fonctionne.

+1

Pouvez-vous ramener le code ici, il est plus facile de lire la question (pour le test et repo). –

+1

Cela semble être un bug dans HV car 5.3 et 5.4 semblent tous deux manquer d'implémentations de validateurs NotEmpty. Si vous souhaitez l'utiliser sur Strings comme dans votre exemple, vous pouvez aussi regarder '@ NotBlank' - celui-ci devrait fonctionner correctement si la contrainte correspond à vos besoins. Ou je recommande également de mettre à niveau vers Hibernate Validator 6.0. C'est la dernière version avec beaucoup d'améliorations. (Mais en cas de 6.0, vous devez faire quelques changements dans votre configuration mais ...) En fait –

+0

à la recherche de plus dans ce - '@ NotEmpty' contrainte de HV est une contrainte composite et il n'y a pas implementaions validateur comme il devrait être en utilisant une composition de validateurs Size et NotNull. Et c'est ce la cause du problème (donc semble encore être un bug, mais un peu différent, que ce que je disais dans le commentaire précédent ...) –

Répondre

1

Vous rencontrez ici un cas intéressant où, pour une contrainte purement composée, il n'est pas possible de déterminer si elle s'applique aux paramètres ou à la valeur de retour d'une méthode. Retour dans le temps de Bean Validation 1.1 we decided de laisser aux implémentations pour gérer ce cas, car il est très rare.

Hibernate Validator permet de résoudre ce cas by specifying@SupportedValidationTarget(ValidationTarget.ANNOTATED_ELEMENT) sur la définition de la contrainte. Cela a été ajouté dans HV 5.2, mais il semble que nous ayons oublié de l'utiliser pour @NotEmpty et potentiellement d'autres contraintes purement composées définies par HV. Pourriez-vous donc nous envoyer un rapport de bogue dans notre JIRA instance?

Notez que vous ne devriez pas avoir le problème avec le @NotEmpty défini dans Bean Validation 2.0 (HV 6.0), car cela n'est pas déclaré comme une contrainte purement composée.

Mise à jour: ce problème a été corrigé dans Hibernate Validator 6.0.3.Final (et rétroportés à 5.3.6.Final et 5.4.2.Final).

+0

Btw. En tant que solution de contournement, cela devrait fonctionner si vous ajoutez un 'ConstraintValidator 'factice pour' @ NotEmpty' via un mappage de contrainte XML. Sa méthode 'isValid()' retournerait toujours 'true', mais sa présence obligerait l'algorithme de résolution à appliquer la contrainte (et donc ses contraintes de composition) à la valeur de retour de la méthode et non aux paramètres. – Gunnar

+0

Merci J'ai créé [cette question] (https://hibernate.atlassian.net/browse/HV-1494) – bilak