2012-06-08 21 views
38

Jersey'de global istisna işlemlerinin yapılmasının bir yolu var mı? Blokları deneme/yakalama ve sonra müşteriye geri gönderilecek istisnaların tümünü dezenfekte eden bazı yöntemleri çağırmak yerine kaynakların gerçekte aranması için bir yol olduğunu umuyorum. Bu mümkün mü? Öyleyse nasıl?Jersey'de Küresel İstisna Yönetimi

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

Having: sanitize(e) Jersey servlet'dir Jersey yapılandırılmış istisna çeşit atardı yerine

,

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

istisna şeye atılmış nerede that I can arayarak sanitize(e) numaralı telefonu arayın.

Bu, yalnızca tüm Jersey kaynaklarını basitleştirmek ve istemciye giden istisnaların her zaman bir tür anlaşılabilir formda olmasını garanti etmektir.

cevap

3

javax.ws.rs.ext.ExceptionMapper arkadaşınız.

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

Örnek:

Ben ExceptionMapper böylece TÜM istisnalar o yönteme yönlendirilir almak yaparsanız bu işleri
@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, tüm istisnaların 'ExcpetionMapper' üzerinden geçmediği anlaşılıyor. 'WebApplicationException' başka bir yerde ele alındı. Örneğin, tüm istisnaları kaydetmek istersek bu bir sorundur. –