Définition des associateurs d'exception pour les erreurs et exceptions de ressources

Les applications Java™ API for RESTful Web Services (JAX-RS) peuvent produire des exceptions et erreurs. Le comportement par défaut est d'utiliser la fonctionnalité de gestion des exceptions du conteneur de l'application comme les pages d'erreurs JavaServer Pages (JSP). Toutefois, vous pouvez personnaliser la gestion des erreurs et envoyer les réponses spécifiques en cas d'exception ou d'erreur.

Pourquoi et quand exécuter cette tâche

Les méthodes de ressources JAX-RS, comme toute méthode Java, peuvent renvoyer des exceptions vérifiées ou non. Par défaut, une erreur ou exception d'exécution non vérifiée se produit à nouveau dans le conteneur. Une exception vérifiée est encapsulée dans une ServletException pour les ressources s'exécutant dans le conteneur Web. Par conséquent, un développeur peut utiliser les fonctions de gestion des erreurs telles que les pages d'erreur JSP pour gérer les exceptions d'une application JAX-RS.

JAX-RS a introduit l'exception, javax.ws.rs.WebApplicationException. Un développeur peut spécifier un nom de classe d'erreur spécifique ou l'objet javax.ws.rs.core.Response lors de la création d'une WebApplicationException. Lorsque la WebApplicationException survient, les informations incluses dans l'exception par un nom de classe de statut ou objet de réponse sont utilisées pour sérialiser une réponse.

Si vous ne pouvez pas émettre l'exception, WebApplicationException, dans votre code et si vous ne pouvez pas utiliser les fonctions de gestion des erreurs dans le conteneur Web, mais que vous souhaitez utiliser une réponse d'erreur personnalisée, vous pouvez créer une classe javax.ws.rs.ext.ExceptionMapper JAX-RS personnalisée pour mapper les exceptions sur les réponses d'erreur HTTP.

La procédure suivante illustre comment écrire une classe ExceptionMapper personnalisée.

Procédure

  1. Créez une classe qui implémente la classe javax.ws.rs.ext.ExceptionMapper et annotez la classe avec l'annotation javax.ws.rs.ext.Provider. Cette étape suppose que votre ressource JAX-RS peut émettre l'exception, MyCustomException, dans ses méthodes. L'exemple suivant illustre une simple classe ExceptionMapper :
    import javax.ws.rs.core.Response;
    import javax.ws.rs.ext.ExceptionMapper;
    import javax.ws.rs.ext.Provider;
    
    @Provider
    public class CustomExceptionMapper implements ExceptionMapper<MyCustomException> {
    
        public Response toResponse(MyCustomException exception) {
            return null;
        }
    
    }
  2. Dans la méthode toResponse(MyCustomException), renvoyez un objet Response qui contient la réponse d'erreur personnalisée. L'exemple suivant illustre une méthode ExceptionMapper.toResponse(MyCustomException) personnalisée :
    @Provider
    public class CustomExceptionMapper implements ExceptionMapper<MyCustomException> {
    
        public Response toResponse(MyCustomException exception) {
            return Response.status(500).entity("Unfortunately, the application cannot
                process your request at this time.").type("text/plain").build();
        }
    
    }
    Vous pouvez avoir du code supplémentaire où vous consignez une erreur, inspectez l'exception émise ou utilisez une logique plus complexe.
  3. Packagez la classe ExceptionMapper personnalisée compilée avec votre projet d'application Web. Si vous vous basez sur les fonctions de scan des annotations pour trouver toutes vos classes JAX-RS dans votre application Web, aucune étape supplémentaire n'est nécessaire. Toutefois, si vous renvoyez tous les fournisseurs et toutes les classes de ressources JAX-RS appropriées dans une méthode de sous-classe d'application JAX-RS, vous devez alors également ajouter la classe ExceptionMapper personnalisée à l'ensemble renvoyé. L'exemple suivant illustre une sous-classe javax.ws.rs.core.Application préexistante :
    import java.util.HashSet;
    import java.util.Set;
    
    import javax.ws.rs.core.Application;
    
    public class MyApplication extends Application {
    
        @Override
        public Set<Class<?>> getClasses() {
            Set<Class<?>> classes = new HashSet<Class<?>>();
            classes.add(CustomExceptionMapper.class);
            /* add your additional JAX-RS classes here */
            return classes;
        }
    }

    Lorsque des exceptions surviennent dans vos méthodes de ressources JAX-RS, vous pouvez personnaliser la réponse d'erreur HTTP de sorte qu'un utilisateur ne peut pas voir une trace de pile ni de données potentiellement confidentielles. Utilisez un ExceptionMapper ou la fonction de gestion des exceptions dans le conteneur Web pour donner des réponses plus utiles si l'application ne se comporte pas correctement.

Résultats

Vous avez écrit un ExceptionMapper personnalisé pour gérer les exceptions dans votre application Web JAX-RS.


Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_defresource_exception_mapper
Nom du fichier : twbs_jaxrs_defresource_exception_mapper.html