2017-08-29 1 views
2

J'apprends le service Web REST. J'ai besoin de quelques précisions sur la gestion des exceptions personnalisées au Jersey. En utilisant WebApplicationException et ExceptionMapper vous pouvez throw personnalisé Exception. Ma question est dans quel scénario nous allons WebApplicationException et ExceptionMapper. Quelles sont les différences entre eux?WebApplicationException v/s ExceptionMapper dans le service Web RESTful (Jersey)

J'ai suivi un tutoriel, j'ai trouvé que ExceptionMapper est comme Generic.

@Provider 
class MyWrapper implements ExceptionMapper<MyPojoClass> 
{ 
} 

Une autre différence est que,

En raison de @ProviderJersey attraperez cette exception que par défaut, si une autre exception se produit également.

Existe-t-il d'autres différences?

MyExceptionMapper.java

package com.katte.galaxe.exception; 

import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 
import javax.ws.rs.core.Response.Status; 
import javax.ws.rs.ext.ExceptionMapper; 
import javax.ws.rs.ext.Provider; 


public class MyExceptionMapper implements ExceptionMapper<MyCustomException> 
{ 

@Override 
public Response toResponse(MyCustomException errMsg) { 
    ErrorMessage msg = new ErrorMessage(errMsg.getMessage(),1100); 
    return Response.status(Status.NOT_FOUND) 
      .type(MediaType.APPLICATION_XML) 
      .entity(msg) 
      .build(); 
} 
} 

MyWebApplicationException.java

package com.katte.galaxe.exception; 

import javax.ws.rs.WebApplicationException; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 
import javax.ws.rs.core.Response.Status; 

public class MyWebApplicationException extends WebApplicationException{ 

private static final long serialVersionUID = -5788907118191114665L; 

public MyWebApplicationException(ErrorMessage msg) { 
    super(Response.status(Status.NOT_FOUND) 
      .entity(msg) 
      .type(MediaType.APPLICATION_XML) 
      .build()); 
} 
} 

Répondre

0

WebApplicationException et ExceptionMapper ne sont pas destinés à être comparés car ils servent un but différent. Au lieu de cela, ils sont destinés à être utilisés ensemble pour une meilleure stratégie de réponse. Imaginez un cas dans lequel une exception est rencontrée lors du traitement d'une requête.

Disons que vous avez rencontré une exception SQLException lors de l'accès à une base de données. Dans ce cas, on peut utiliser ExceptionMapper pour mapper SQLException avec une réponse 5xx appropriée au lieu de propager l'exception originale à l'utilisateur final.

WebApplicationException

d'exception pour les applications d'exécution.

Cette exception peut être levée par une méthode de ressource, un fournisseur ou une implémentation StreamingOutput si une réponse d'erreur HTTP spécifique doit être produite. Seulement efficace si lancé avant que la réponse ne soit commise.

ExceptionMapper

contrat pour un fournisseur qui mappe Java exceptions à la réponse.