Question

est JSR-303 également destiné à la validation des paramètres de la méthode?

Si oui, est-il par exemple sur le web? Le plus grand défi que je suis face est de savoir comment obtenir un validateur au sein de chaque méthode. Avec Spring 3, ne pas dire que je dois injecter pratiquement toutes les classes avec un LocalValidatorFactoryBean?

Merci!

Était-ce utile?

La solution

Cela sonne comme un cas d'utilisation pour AOP (AspectJ). Écrire un pointcut pour les méthodes qui sont annotés avec javax.validation.constraints.*, Injecter un validateur dans l'aspect (probablement en utilisant Spring) et utiliser un conseil @Before ou @Around pour effectuer la validation avant l'exécution de la méthode.

AspectJ en action pour référence.

Autres conseils

Validation de niveau méthode sera prise en charge dans la prochaine version 4.2 de la mise en œuvre de référence de JSR 303 Hibernate Validator.

Comme indiqué dans la réponse précédente ce qui permettra des annotations contrainte (intégrée ainsi que les types définis sur mesure) à préciser à des paramètres de la méthode et les valeurs de retour pour indiquer pré et post-conditions pour l'invocation d'une méthode.

Notez que HV ne traitera qu'avec la validation réelle des appels de méthode pas avec le déclenchement d'une telle validation. appel de validation peut être fait en utilisant AOP ou d'autres installations d'interception de la méthode tels que les proxies dynamiques de JDK.

La question de JIRA est pour ce HV-347 [1], de sorte que vous pouvez vous ajouter watcher à cette question.

[1] http://opensource.atlassian.com/projects/hibernate / browse / HV-347

Le javadocs pour chaque des JSR 303 annotations indique ce qui suit:

@Target(value={METHOD,FIELD,ANNOTATION_TYPE,CONSTRUCTOR,PARAMETER})

Voir, PARAMETER est là. Alors, oui, il est techniquement possible.

Voici un exemple:

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

Je ne suis cependant pas certain que avec Spring intègre depuis que je ne l'utilisent pas. Vous pouvez tout simplement essayer.

Au printemps 3.1.0 vous pouvez utiliser l'annotation @Validated pour activer la validation sur un POJO. Créer une interface pour la classe POJO une mise cette annotation dessus, puis ajouter des annotations de validation dans les définitions des méthodes. (L'interface est nécessaire parce que le printemps va créer une classe proxy à l'aide de l'interface comme définition)

@Validated
public interface PojoClass  {
    public @NotNull String doSomething(@NotEmpty String input);
}

votre POJO:

public class PojoClassImpl implements PojoClass {
    public String doSomething(String input) {
        return "";
    }
}

A partir d'une application web standard printemps avec validation actif, souvenez-vous d'ajouter dans votre configuration de printemps de cette déclaration de haricot:

<bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor"/>

Vous pouvez utiliser jcabi-aspects (Je suis un développeur), qui intègre JSR 303 avec AspectJ. validation réelle se fait par l'un des JSR 303 mises en œuvre, que vous devrez ajouter au chemin de classe, comme Hibernate Validator, ou Apache Bval.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top