0
votes

Les exceptions personnalisées sont-elles vraiment nécessaires

J'ai une connaissance de base de la manipulation des exceptions, mais je ne comprends toujours pas quand des exceptions personnalisées sont vraiment nécessaires pour être créées.

Eh bien, je savais que si des exceptions personnalisées fournissent des champs supplémentaires, les exceptions personnalisées sont vraiment. utile, et sinon, nous pouvons utiliser des exceptions standard.

mais ma question est la suivante:

  1. Si nous options pour des exceptions standard, disons, si j'utilise jette nouvelle runtimédiexception ("bla bla") dans plusieurs microservices, comment puis-je être capable d'identifier rapidement quel microsservice a lancé Cette exception ?. Bien sûr, je pourrais l'identifier en examinant les journaux, mais c'est une bonne pratique pour lancer des exceptions standard plutôt que d'utiliser des exceptions personnalisées?
  2. Dans mon projet, dans chaque microservice, j'ai vu des exceptions personnalisées sont en cours de création, ils viennent d'étendre des informations sur RunTimeException et aucune information supplémentaire dans l'une de ces exceptions personnalisées. Souhaitez-vous considérer cette bonne ou mauvaise pratique?
  3. Si je recherche google sur cette rubrique, un extrait de code commun utilisé est celui-ci:

    namenotfoundexception: xxx

    Pensez-vous que des exceptions personnalisées de base comme celle-ci doivent être utilisées du tout?


2 commentaires

Quand devons-nous créer nos propres cours d'exception Java?


John - Si l'une des réponses résolvait votre problème, vous pouvez aider la communauté en le marquant comme accepté. Une réponse acceptée aide les futurs visiteurs à utiliser la solution avec impatience. Vérifiez meta.stackexchange.com/questions / 5234 / ... pour apprendre à le faire.


5 Réponses :


1
votes

Nous traitons des appels de repos, beaucoup em> (tant que nous avons écrit notre propre wrapper autour du client HTTP de JDK); Différents fois appelant non seulement nos points d'extrémité. Lorsque nous parlons à ces points de terminaison, nous définissons une exception personnalisée, comme:

class OurCustom extends ... {

       int httpCode;
       String receivedMessage;
       OffSetDateTime receivedAt;

}
  • intention em> li> ul>

    Quand je vois qu'un certain service jette ce OurCustom code>, je sais immédiatement ce que c'est l'intention, je comprends quelles actions je devrais prendre et quelles méthodes il a. Si cela aurait été un clair runtimédiexception code>, il aurait été un peu plus difficile. p>

    • Info de débogage supplémentaire em> li> ul>

      Vous pouvez ajouter plus de choses à une exception personnalisée, pas seulement le message lui-même, comme httpcode code> ou message code>. Cela simplifie la vie des personnes qui doivent interagir avec cette exception. Mais il suffit de l'étendre sans aucune information supplémentaire pourrait également être une valeur supplémentaire, cela dépend. P>

      Alors oui, il y a des cas où je trouve cela très utile. p> p>


0 commentaires

1
votes

La RunTimeException est également lancée par la JVM elle-même dans des situations d'erreur. Donc, vous ne pouvez pas distinguer facilement si vous voulez effectuer une manipulation à vos exceptions dans les blocs de capture.

Si nous options pour une exception standard, disons, si j'utilise de nouvelles nouvelles RuntttimeException ("Blah Blah") dans plusieurs microservices, alors comment pouvons-nous nous identifier rapidement rapidement, à partir de quel microservice montrant cette exception? (Disons que nous avons 30 microservices). Bien sûr, en examinant le journal, nous pouvons identifier, à partir de quelle exception obtiennent une exception .. mais c'est une bonne pratique pour lancer des exceptions standard plutôt que des exceptions personnalisées?

Je suppose que les microservices ont une sorte d'API Web (c'est-à-dire HTTP), l'appelant ne doit donc pas voir "Naked" RunTimeExceptions - sinon votre API dépend de votre langage de programmation et que vous êtes coincé à Java. Si vous voulez dire que vous faites votre cartographie d'exception basée sur RunTimeExceptions, vous n'êtes peut-être pas suffisamment précis - que si une bibliothèque que vous utilisez jette une exception runtimédie? Mieux vaut utiliser votre propre classe d'exception.

Le mappage minimal serait mapper des exceptions aux codes d'erreur HTTP IMHO, c'est-à-dire 200 / OK, 400 / Demande mauvaise ou 403 / interdite.

2) Dans mon projet, dans chaque microservice, j'ai vu des exceptions personnalisées créé, ils étend simplement RunTimeException et aucune information supplémentaire dans l'une de ces exceptions personnalisées. Dis-tu, nous faisons mal?

Il n'y a rien de mal à cela. Les codes d'erreur ou les messages sont là pour la manipulation et / ou les afficher. Vous pouvez jeter un coup d'œil sur des techniques de cartographie d'exception du service Jersey Jax-Rs Service Ici .

faire, vous pensez au-dessus des exceptions personnalisées ne doit pas être créée du tout?

Je pense que vous avez besoin d'un moyen simple défini dans chacun de vos microservices pour produire des messages d'erreur. Un moyen très simple consiste à mapper des exceptions aux codes d'état HTTP (exemple ci-dessus). Une autre façon est d'envoyer explicitement le statut HTTP sans utiliser d'exceptions. En passant sur le code de statut est quelque chose d'opk pour le code très simple: xxx

Ma recommandation: Commencez par l'approche la plus simple (codes d'état direct) et changer pour travailler avec plus d'abstraction comme des mappeurs d'exception si nécessaire (Kiss - le garder sonore et simple).


0 commentaires

0
votes

Vous pouvez faire plus avec des exceptions que simplement sortir un message. Même si vos exceptions personnalisées ne sont rien de plus qu'une enveloppe de la classe de base, il vous donne des options sur la meilleure façon de gérer les différentes exceptions. Parfois, il vous suffit de mettre à jour un composant UI. Parfois, vous devez enregistrer l'erreur d'examen ultérieur. Vous devez peut-être forcer la fermeture de l'application ou une fenêtre. Par exemple, si vous avez une méthode qui valide certaines données, vous pourriez avoir une exception pour des données non valides qui modifient simplement des éléments d'interface utilisateur au style des erreurs. Et si le validateur lui-même jette une exception? Ensuite, vous voudrez le connecter et informer l'utilisateur que quelque chose est sérieusement faux.


0 commentaires

1
votes

J'utilise toujours des exceptions personnalisées dans mes projets: xxx

afin que je puisse répondre à toute mon exception de la même manière (pseudo code): xxx < / Pre>

Ce n'est qu'un exemple, mais j'espère pouvoir montrer l'idée. Vous devez également utiliser des exceptions personnalisées pour masquer les messages d'erreur. Voir mon USERNOTFoundException


0 commentaires

1
votes

Généralement, des exceptions personnalisées sont nécessaires dans les situations suivantes:

  1. Pour signaler une situation d'erreur / exception qui ne correspond pas aux exceptions standard.
  2. pour le distinguer des exceptions standard.
  3. Pour ajouter des informations supplémentaires qui seront utiles pour la journalisation / le débogage, etc.

    Dans mon projet, dans chaque microservice, j'ai vu des exceptions personnalisées créé, ils étend simplement RunTimeException et aucune information supplémentaire dans l'une de ces exceptions personnalisées. Dis-tu, nous faisons mal?

    Il n'y a rien de mal à ce sujet, mais si cela ne correspond à aucun des cas mentionnés ci-dessus, il est inutile.


0 commentaires