Mondial de la gestion des exceptions en Jersey & le Printemps?
Je suis en train d'élaborer les webservices RESTful à l'aide de Jersey & Printemps 3.2 avec ouverture de CMIS.
Je ne suis pas en utilisant un modèle MVC de Printemps et il est juste de Printemps CIO & Jersey SpringServlet, le contrôleur de classe est quelque chose comme le code ci-dessous
@GET
@Path("/{objId:.+}")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public statusMsg addObject(@PathParam("objId") String objId{
return repoService.addObject(objId);
}
Dans le repoService je suis exécution de la logique métier pour ajouter l'objet à l'aide CMIS, ma question est que je suis attraper autour de 5 exceptions liées à la CMIS puis la base exception que j'ai.e Exception, mais, pour chaque service à la méthode que j'ai à le répéter à qui je ne veux pas faire.
J'ai cherché sur Google et trouvé que @ControllerAdvice est la meilleure solution pour ce problème wheer vous pouvez définir toutes les checked & décoché exceptions et où supprimer tous les blocs try catch à partir de l'application. Mais c'est seulement à travailler avec le modèle MVC.
Question 1: Est-il possible que je peux l'utiliser dans au-dessus de Jersey-framework Spring?
Après plusieurs recherche j'ai trouvé ce Maillot offre ExceptionMapper à la poignée d'exception personnalisée, mais je veux prendre plus de CMIS exception ou d'Exception par défaut ou IO Exception etc.
Question 2: Comment puis-je le faire avec ExceptionMapper?
Question 3: Suis-je sur la bonne approche ou vous suggérer la meilleure approche pour traiter de telles questions.
Merci d'avance.
OriginalL'auteur user3306543 | 2014-09-15
Vous devez vous connecter pour publier un commentaire.
- Je utiliser jersey2.11 avec Tomcat et presque l'exception de la poignée avec ExceptionMapper.
(Dans le domaine de la logique, seulement DB processus de restauration d'utiliser le code try-catch.)
Je pense que ExceptionMapper avec @Fournisseur automatiquement choisir la bonne ExceptionMapper. Donc je suppose que cette fonction est satisfait "je veux prendre plus de CMIS exception ou d'Exception par défaut ou IO Exception etc."
Ce code est à mes manipulations ExceptionMapper code de conception.
1.Certains Maillot Racine De La Classe De Ressources
2.ExceptionMapper paquet. com.votredomaine.exceptionmapper
AbstractExceptionMapper.java (Tous les ExceptionMapper cette classe étend la classe Abstraite)
ExceptionMapper.java (Au moins cette mapper peut attraper une exception qui n'est pas de définir spécifier exception mappeur.)
WebApplicationExceptionMapper.java (Préciser WebApplicationException)
ConstraintViolationExceptionMapper.java (Préciser Hibernate Validator ConstraintViolationException)
.. et l'autre à préciser exception peut créer ExceptionMapper classes.
Dans mon expérience, à l'Exception Mappeur de haut niveau idée pour se concentrer à un domaine logique. Il pourrait chasser ennuyeux dispersés bloc try-catch code du domaine de la logique.
Donc j'espère que vous vous sentez le "Oui, je suis" à la Question 3, pour résoudre le problème à votre environnement.
bonne chance.
je ne peux pas "ajouter un commentaire" pour la réponse, j'ai donc ajouter un commentaire ci-dessous.
vous n'avez pas utilisé essayez de l'attraper et de le jeter n'importe où dans l'application.
Mon code de conception de l'utilisation jette à la méthode de ce genre et ce faire gérer par ExceptionMapper classes.
Donc dans l'approche ci-dessus, j'ai créé, à seulement 1 classe pour toutes les exceptions qui je pourrais m'attendre et pour n'importe quel inconnu exception de la base Exception sera là pour l'attraper.
Maintenant, où que ce soit dans mon application si une exception se produit il s'agit de la CentralControllerException et la réponse adéquate avec le code d'état http est envoyée en retour.
Q. 2. Prévoyez-vous des problème dans l'approche ci-dessus.
Je pense que si un projet simple ou jamais de mise à jour/modifier le projet (cycle de vie des projets à court de temps), une classe d'exception approche de mapper ok.
Mais ... je ne prends jamais de cette approche. Tout simplement, si besoin de gérer plus d'exception, cette méthode à devenir de grands et complexes, et difficiles à lire et à maintenir devenir.
Dans ma politique, de la programmation orientée objet doit utiliser le pléomorphisme stratégie de n'importe quel niveau du code(plan de classe -, DI-plan) et cette approche une partie pour but de conduire si/bloc de commutateurs dans le code. Et cette idée de faire de chaque méthode de code court et simple, claire de "domaine de la logique" et le code de devenir résistants à modifier.
J'ai donc créer implémente ExceptionMapper et délégué à la DI qui ExceptionMapper classe de gérer d'exception.
(Si DI gérer remplacer votre classe unique Si le bloc de gérer la gestion des exceptions, ce qui est généralement le refactoring approche similaire Extrait xxx http://refactoring.com/catalog/extractClass.html.
Dans notre discussion de cas, seule la classe et une méthode trop occupé, de sorte que l'extrait de chaque ExceptionMapper classe approche et DI appeler adapté classe & méthode de stratégie.)
Btw, système résultat du traitement est de même au présent point. Mais en cas de besoin afin de réduire les coûts de développement ,ne devrait pas pris approche d'une classe d'exception régime de traitement. Parce que s'abandonner simplement le code et refactoriser le statut, le code du projet est mort plus rapide.
C'est mon idée, et pourquoi ce.
ce qui concerne.
OriginalL'auteur kj13
merci pour votre réponse. Je peux voir que vous avez créé plusieurs classes selon le type d'exception et de comportement.
T1. Dans vos services méthode êtes-vous d'y jeter de l'exception comme
ou vous n'avez pas utilisé essayez de l'attraper et de le jeter n'importe où dans l'application.
En fait, j'ai essayé quelque chose où, dans mon application web, je ne suis pas à l'aide de try, catch et jette n'importe où et dans mon CentralControllerException j'ai cité, comme ci-dessous:
Donc dans l'approche ci-dessus, j'ai créé, à seulement 1 classe pour toutes les exceptions qui je pourrais m'attendre et pour n'importe quel inconnu exception de la base Exception sera là pour l'attraper.
Maintenant, où que ce soit dans mon application si une exception se produit il s'agit de la CentralControllerException et la réponse adéquate avec le code d'état http est envoyée en retour.
Q. 2. Prévoyez-vous des problème dans l'approche ci-dessus.
OriginalL'auteur user3306543