10
votes

Validation du paramètre de méthode avec JSR-303

est également destiné à la validation de paramètres de méthode?

Si oui, existe-t-il un exemple sur le Web? Le plus grand défi que je suis confronté est de savoir comment obtenir un validateur dans chaque méthode. Avec le printemps 3, cela ne signifie-t-il pas que je devrais injecter pratiquement toutes les classes avec un localValidatorFactoryBean ?

merci!


0 commentaires

5 Réponses :


3
votes

the Javadocs pour chaque des annotations JSR 303 indique ce qui suit:

public void method(@NotNull String parameter) {
    // ...
}


0 commentaires

2
votes

Cela ressemble à un cas d'utilisation pour AOP (aspectj). Écrivez un point de pointe pour les méthodes annotées avec javax.validation.constraint. * , injecter un validateur dans l'aspect (probablement à l'aide du ressort) et utilisez un @Before ou ou @Around conseils pour effectuer la validation avant exécution de la méthode.

lire AspectJ en action pour référence.


0 commentaires

10
votes

La validation du niveau de la méthode sera prise en charge dans la version à venir 4.2 de la mise en œuvre de la référence de référence JSR 303 Validator Hibernate.

Comme indiqué dans la réponse précédente, cela permettra de spécifier des annotations de contrainte (intégrées ainsi que sur des types définis personnalisées) sur les paramètres de la méthode et les valeurs de retour pour spécifier les pré-conditions et les post-conditions d'une méthode d'invocation.

Notez que HV ne traitera que de la validation réelle des appels de méthode non liés à la déclenchement d'une telle validation. L'invocation de la validation pourrait être effectuée à l'aide des installations d'interception de l'AOP ou d'autres méthodes telles que les proxies dynamiques de JDK.

Le problème de la JIRA pour cela est HV-347 [1], vous pouvez donc vous ajouter comme surveillant à ce problème.

[1] http://opensource.atlassian.com/projects/ibernate / Parcourir / HV-347


2 commentaires

Je pense que votre poteau de blog complète votre réponse;) musingsofaprogrammingAddict.blogspot. COM / 2011/01 / ...


Gunnar était assez agréable pour mettre sa solution dans GitHub . Travaillé très bien pour moi.



0
votes

Vous pouvez utiliser JCABI-Aspects (je suis un développeur), qui intègre JSR 303 avec aspectj. La validation réelle est effectuée par l'une des implémentations JSR 303, que vous devrez ajouter au chemin de classe, comme le validateur Hibernate ou Apache Bval.


0 commentaires

3
votes

au printemps 3.1.0 Vous pouvez utiliser une annotation @Validée pour activer la validation sur un pojo. Créez une interface pour la classe Pojo An Mettez cette annotation dessus, puis ajoutez vos annotations de validation dans les définitions méthodes. (L'interface est requise car le ressort créera une classe proxy à l'aide de l'interface comme définition) xxx

votre pojo: xxx

à partir d'un Application Web de ressort standard avec validation active, n'oubliez pas d'ajouter dans votre configuration de ressort cette déclaration de haricot: xxx


1 commentaires

Pour une raison bizarre contrainteViolationException Public \ @notnull String Dosomething (); n'a pas fonctionné mais @notnull String Public String Dosomething (); fait. Utilisé la barre pour échapper au symbole au symbole qui a été confondé avec l'utilisateur par s.o