2017-10-04 3 views
0

La gestion des exceptions Java est subdivisée en Erreurs, exceptions vérifiées et exceptions non contrôlées. Cette question concerne les exceptions.Java Micro-boot de démarrage d'exception Gestion des exceptions

gestion des exceptions Java normale est d'étendre la classe d'exception pour les exceptions et vérifiés gérer ceux que vous avez besoin en prenant en compte la hiérarchie des exceptions.

par exemple .:

public class ExceptionA extends Exception {} 

public class RunClass { 

    public static void main() { 
     try { 
      RunClass runClass = new RunClass(); 
      runClass.doSomething(); 
     } catch(ExceptionA eA) { 
      // Do ExceptionA related resolutions. 
     } catch(Exception e) { 
      // Do Exception related resolutions. 
     } 
    } 

    public doSomething() throws ExceptionA { 
     throw new ExceptionA(); 
    } 
} 

Mais j'ai vu les grands livres de printemps et même sur les tutoriels Internet mentionnés avec le printemps-démarrage et dans le cadre des micro-services Déployez toujours de la classe RuntimeException même avec le @ControllerAdvice.

Ceci est une violation flagrante des principes de base Java de gestion des exceptions. Mais il y a toujours un argument disant que, il est étendu avec RuntimeException parce que cette exception est gérée par la méthode @ExceptionHandler et qu'il est généré et manipulé à la fois dans le runtime.

encore, en raison de cette extension de RuntimeException fait compiler piste la gestion des exceptions de temps non visible et rend difficile de retracer comment exception est levée vers le haut. En raison de ces raisons, je crois toujours, suivez le concept de gestion des exceptions vérifiées et non contrôlées Java de base toujours avec la méthode @ExceptionHandler.

.: par exemple

public class ExceptionRA extends RuntimeException {} 

@ContollerAdvice 
public class ExceptionHandler { 

    @ExceptionHandler(ExceptionRA.class) 
    public String handleException (Exception exception, Model model) { 
     return "exception"; 
    } 

} 

@Controller 
public class RunClass { 

    @RequestMapping("/url1") 
    public doSomething() { 
     throw new ExceptionRA(); 
    } 
} 

Dois-je suivre l'extension RuntimeException pour tous les scénarios d'exception avec @ExcpetionHadler ou suivre Java de base vérifié et mécanisme sans contrôle avec @ExceptionHaldler? Les idées, suggestions et corrections sont les bienvenues.

+0

@lexocore: Ajouté la question – Chinthaka

Répondre

2

Préférences sur les exceptions cochée/décochée sont comme une religion.

Normalement, vous n'appelez pas les méthodes de contrôleur dans votre propre code. En général, vous n'aurez pas le code comme:

try { 
    runClass.doSomething(); 
} catch(ExceptionRA exra) { 
    // Handle handle handle 
} 

Vous ne bénéficierez pas directement d'exceptions vérifiées lance à partir de la méthode du contrôleur. Ils ne forceront pas la manipulation vérifiée car il n'y a aucun endroit pour les gérer. Ainsi, vous pouvez tout aussi bien lancer des exceptions non cochées et raccourcir la signature de la méthode. Il n'y a aucune valeur ajoutée à lancer des exceptions vérifiées à partir des méthodes du contrôleur.

Une exception peut également être lancée par une méthode de service busines que le contrôleur appelle. Cela soulève deux questions:

  • Faut-il utiliser des exceptions cochées ou non dans votre logique métier?
  • Si la logique métier renvoie l'exception vérifiée, devez-vous l'inclure comme une exception non vérifiée? Ou juste passer à travers?

La réponse à la première question est - vous ne devriez pas laisser cette décision être influencée par ce que vous faites dans le contrôleur. Fais-le selon ta "religion d'exception". Si vous préférez vérifier l'exception, utilisez les exceptions vérifiées, que vous utilisiez ou non le contrôleur.

Non à la deuxième question. En supposant que votre logique métier renvoie une exception vérifiée. Si cette exception représente adéquatement la situation de l'appelant, il n'y a aucune raison de l'inclure dans une autre exception, qu'elle soit cochée ou non.Si votre exception métier n'explique pas correctement la situation à l'appelant, mieux l'envelopper. Ensuite, une exception non contrôlée rendra votre signature plus courte.

Maintenant, une opinion personnelle. Je préfère généralement vérifier les exceptions pour tout sauf les erreurs de programmation. Je les utilise également dans les contrôleurs (sans oublier les signatures de méthodes longe).