1
votes

Gestion de Spring MVCException

J'ai un contrôleur MVC contenant au moins 50 fonctions et mon appel aux services n'est pas bouclé autour de try catch et certaines des exceptions sont mangées. J'essaie de trouver la meilleure façon de gérer cela.

Dois-je envelopper les appels autour de try catch dans une fonction individuelle ou y a-t-il une fonction que je peux utiliser pour enregistrer l'exception. Je ne veux pas envoyer une autre vue ou quelque chose que je veux simplement enregistrer dans les journaux.


0 commentaires

3 Réponses :


1
votes

Vous devriez probablement regarder @ExceptionHandler (gestion des exceptions basée sur le contrôleur) ou @ControllerAdvice (gestion globale des exceptions). Cet article explique les deux en détail. < / p>

L'autre solution possible est AOP .


0 commentaires

0
votes

Vous pouvez étendre SimpleMappingExceptionResolver et remplacer logException () comme ceci:

public class ViewExceptionLoggerInterceptor extends HandlerInterceptorAdapter {
    protected final Log logger = LogFactory.getLog(getClass());
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        if (ex != null) {
            logger.error(ex);
        }
    }
}

Cependant, si l'exception se produit dans la vue, ce qui précède ne l'enregistrera pas. Pour cela, vous pouvez étendre HandlerInterceptorAdapter:

public class CustomExceptionResolver extends SimpleMappingExceptionResolver {
    @Override
    protected void logException(Exception ex, HttpServletRequest request) {
        if (ex != null) {
            logger.error(ex);
        }
    }
}


5 commentaires

J'ai ajouté cela mais cela n'a rien fait. Dois-je aussi inclure autre chose?


Avez-vous configuré les beans dans votre configuration Spring?


Non. Comment puis je faire ça?


Voir mkyong.com/spring-mvc/spring-mvc-exception- exemple de manipulation et mkyong.com/spring-mvc / spring-mvc-handler-interceptors-exampl‌ e pour la configuration xml. Je suis sûr qu'il existe un nouveau moyen d'annotation pour le configurer, mais je ne suis pas familier avec cela.


Voir également spring.io/blog/2013/11/ 01 / exception-handling-in-spring-mvc (il est mis à jour depuis 2013)



0
votes

Pour centraliser la gestion des exceptions, utilisez la commande suivante:

@ControllerAdvice
public class MyExceptionHandler{

   @ExceptionHandler(SomeException.class)
   public final ResponseEntity<ReturnValue> handleSomeException(SomeException ex) {
    // exception handling
   }
}

Si vous avez besoin de ModelAndView comme valeur de retour, modifiez-y simplement le type de retour et créez le objet approprié dans le corps.


0 commentaires