J'ai beaucoup lu sur l'API de validation de Bean qui accompagne Java EE 6+ et je comprends les bases du fonctionnement de l'API de validation, mais dans la documentation que j'ai lue, tous les les exemples sont des tests unitaires qui ne m'aident pas à comprendre O WH implémenter les opérations de validation.La validation du bean avec EJB
Je développe un système d'architecture à trois niveaux. Je voudrais placer la validation à la couche de service, ainsi je peux réutiliser le code de validation si la couche de présentation diffère (c'est-à-dire Jax-RS, JSF, etc.). Mais je suis confus sur la façon de mettre en œuvre ces opérations. Voici où je suis coincé:
J'ai des haricots qui interagissent avec les différentes entités de mon modèle. Par exemple ceci est une méthode dans mon haricot pour l'interaction utilisateur ->
public User getUser(
@Min(value = 0, message = "Must have a positive userId") int uid)
throws RetrievalNotFoundException {
try {
// I WANT TO VALIDATE UID HERE
// find User with provided uid
User foundUser = em.find(User.class, uid);
// IF the user is inactive
if (foundUser.getIsActive() == 0) {
// cannot find the content
throw new RetrievalNotFoundException();
}
// close the entity manager
em.close();
// return the user
return foundUser;
}
Voici l'exemple de la documentation de mise en veille prolongée:
Car object = new Car("Morris");
Method method = Car.class.getMethod("drive", int.class);
Object[] parameterValues = { 80 };
Set<ConstraintViolation<Car>> violations = executableValidator.validateParameters(
object,
method,
parameterValues
);
assertEquals(1, violations.size());
Class<? extends Annotation> constraintType = violations.iterator()
.next()
.getConstraintDescriptor()
.getAnnotation()
.annotationType();
assertEquals(Max.class, constraintType);
Suis-je vraiment censé instatiate le nouveau haricot pour accéder à sa méthode getUser()? Je suis confus. Une autre question que j'avais était ce qui se passe si quelqu'un décide de mettre dans un int pour l'uid qui déborde le conteneur int? Comment pourrais-je valider cela? Merci beaucoup pour votre aide, Je l'apprécie vraiment.
Merci, beaucoup d'informations utiles là-dedans. En fait, j'utilise Java EE 7 avec glassfish 4.0 environnement d'exécution. Je pense que la validation au niveau de la méthode est faite par défaut comme vous l'avez dit. Je pense que je devrais écrire mes propres validateurs, puis pour les méthodes avec des listes de paramètres plus longues, afin de ne pas intégrer toutes les contraintes sur les paramètres. Merci pour votre aide! –
Correct, EE7 avec Glassfish 4 a la validation de la méthode activée selon la section de spécification I mentionnée. En ce qui concerne les contraintes personnalisées, vous pouvez certainement créer vos propres contraintes, mais je ne vois pas comment cela réduit la quantité d'annotations. Sauf si vous voulez combiner plusieurs contraintes en une seule contrainte de composition. Cela réduirait bien sûr la quantité d'annotation à placer sur les paramètres. – Hardy