Attrapez toutes les exceptions et renvoyez également des erreurs personnalisées dans Jersey
Je veux attraper toutes les Exceptions inattendues dans un maillot de service rest.
Donc, j'ai écrit un ExceptionMapper:
@Provider
public class ExceptionMapper implements javax.ws.rs.ext.ExceptionMapper<Exception> {
private static Logger logger = LogManager.getLogManager().getLogger(ExceptionMapper.class.getName());
@Override
public Response toResponse(Exception e) {
logger.log(Level.SEVERE, e.getMessage(), e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("Internal error").type("text/plain").build();
}
}
Le mappeur de captures vraiment toutes les exceptions. Donc je ne peux pas écrire:
public MyResult getById(@PathParam("id")) {
if (checkAnyThing) {
return new MyResult();
}
else {
throw new WebApplicationException(Response.Status.NOT_FOUND);
}
}
Ce est piégé par le Mappeur. Maintenant, je dois écrire:
public Response getById(@PathParam("id") {
if (checkAnyThing) { {
return Response.ok().entity(new MyResult()).build();
}
else {
return Response.status(Response.Status.NOT_FOUND).build();
}
}
Est-ce le bon moyen d'attraper toutes les exceptions inattendues et aussi retourner des erreurs (codes d'erreur) en jersey? Ou est-il un autre (plus correct)?
source d'informationauteur Dominic
Vous devez vous connecter pour publier un commentaire.
WebApplicationException
a ungetResponse ()
à partir de laquelle nous pouvons obtenir laResponse
. De sorte que vous pouvez vérifier pour unWebApplicationException
dans votre mapper. Peut-être quelque chose commeDe cette façon, une instance de
WebApplicationException
lancés il suffit de retourner la réponse par défaut. Cela permettra en fait de gérer certaines autres exceptions aussi, ils ne sont pas jetés explicitement par votre application.WebApplicationException
a quelques autres exception en vertu de sa hiérarchie, qui sont jetés par JAX-RS, pour laquelle la réponse prédéfinie/codes d'état sont enveloppés.Cela étant dit, nous pourrions explicitement jeter aucune de ces exceptions dans notre code, juste pour lui donner plus de valeur sémantique.
De façon générale toutefois, l'exemple ci-dessus peut être inutile, sauf si vous souhaitez modifier le message de réponse/code d'état, que l'on peut à partir de la table ci-dessus, la hiérarchie des exceptions ont déjà une certaine générale de la cartographie. Et dans la plupart des cas, les exceptions inattendues seront déjà mappé à
InternalServerErrorException