Existe-t-il un moyen de gérer les exceptions globales à Jersey? Au lieu que les ressources individuelles aient des blocs try/catch et appellent ensuite une méthode qui nettoie ensuite toutes les exceptions à renvoyer au client, j'espérais qu'il y avait un moyen de mettre cela là où les ressources sont réellement appelées. Est-ce seulement possible? Si c'est le cas, comment?
Au lieu de, où sanitize(e)
lèverait une sorte d'exception configurée par Jersey au servlet Jersey:
@GET
public Object getStuff() {
try {
doStuff();
} catch (Exception e) {
ExceptionHandler.sanitize(e);
}
}
Ayant:
@GET
public Object getStuff() throws Exception {
doStuff();
}
où l'exception serait levée vers quelque chose que je peux intercepter et appeler sanitize(e)
à partir de là.
C'est vraiment juste pour simplifier toutes les ressources Jersey et pour garantir que les exceptions remontant au client sont toujours sous une forme compréhensible.
Oui. JAX-RS a un concept d'ExceptionMappers. Vous pouvez créer votre propre interface ExceptionMapper pour mapper toute exception à une réponse. Pour plus d'informations, voir: https://jersey.github.io/documentation/latest/representations.html#d0e6352
javax.ws.rs.ext.ExceptionMapper est votre ami.
Source: https://jersey.Java.net/documentation/latest/representations.html#d0e6665
Exemple:
@Provider
public class EntityNotFoundMapper implements ExceptionMapper<javax.persistence.EntityNotFoundException> {
public Response toResponse(javax.persistence.EntityNotFoundException ex) {
return Response.status(404).
entity(ex.getMessage()).
type("text/plain").
build();
}
}