2012-06-08 18 views
38

Esiste un modo per gestire le eccezioni globali in Jersey? Invece delle singole risorse che hanno dei blocchi try/catch e poi chiamano un metodo che poi disinfetta tutte le eccezioni da restituire al client, speravo che ci fosse un modo per mettere questo in cui le risorse sono effettivamente chiamate. È possibile? Se é cosi, come?Gestione globale delle eccezioni in Jersey

Invece di, dove sanitize(e) sarebbe gettare una sorta di eccezione Jersey-configurato per il servlet Jersey:

@GET 
public Object getStuff() { 
    try { 
     doStuff(); 
    } catch (Exception e) { 
     ExceptionHandler.sanitize(e); 
    } 
} 

Avere:

@GET 
public Object getStuff() throws Exception { 
    doStuff(); 
} 

in cui l'eccezione otterrebbe gettato a qualcosa che posso intercettare e chiamare sanitize(e) da lì.

Questo è solo per semplificare tutte le risorse di Jersey e garantire che le eccezioni che tornano al cliente siano sempre in una forma comprensibile.

risposta

38

Sì. JAX-RS ha un concetto di ExceptionMappers. È possibile creare la propria interfaccia ExceptionMapper per mappare qualsiasi eccezione a una risposta. Per maggiori informazioni vedi: https://jersey.github.io/nonav/documentation/1.12/jax-rs.html#d4e435

+3

Questo funziona se faccio ExceptionMapper così tutte le eccezioni ottenere indirizzato a tale metodo. Grazie. – Trisfall

+3

O anche 'ExceptionMapper ', quindi puoi anche gestire 'Error's gettato. – tsauerwein

3

javax.ws.rs.ext.ExceptionMapper è tuo amico.

Fonte: https://jersey.java.net/documentation/latest/representations.html#d0e6665

Esempio:

@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(); 
    } 
} 
+1

BTW, sembra che non tutte le eccezioni siano passate attraverso 'ExcpetionMapper'. 'WebApplicationException' è stato gestito altrove. Questo è un problema se mi piacerebbe registrare tutte le eccezioni, per esempio. –