2014-10-15 26 views
6

Uygulamam, bazı eylemleri gerçekleştirmek için RESTful bir arabirim sağlar. Ben vb ... NoResultException veya EntityNotFoundException gibi özel durumları yakalamak ve sonra NumberFormatException veya ConstraintViolationException gibi bir durum 404 kodu veya istisnalar dönmek ve 400 bir durum kodu döndürecek şekilde ExceptionMapper kullanıyorumFarklı istisnalar için aynı ExceptionMapper

Benim sorunum sadece ExceptionMapper olduğunu her seferinde bir tür İstisna seçmeme izin veriyor; Bu nedenle, tüm hata 400 ve diğer tüm hata 404 için aynı sınıfı kullanamıyorum.

İki farklı tür özel durumu eşleyen bir ExceptionMapper oluşturmak için herhangi bir yol var mı?

cevap

3

Tek bir ExceptionMapper yazabilirim ... ama kötü olduğunu düşünüyorum;

Benim diğer seçenek yerine dize (@Produces("application/json")); olarak etiketlenmiş ve ardından durum kodu her zaman set bir Yanıtı dönmek benim fonksiyonları değiştirmektir

public class MyExceptionMapper implements ExceptionMapper<Exception> { 
    @Override 
    public Response toResponse(Exception exception) { 
     if (exception instanceof EntityNotFoundException) { 
      ... 
     } 
     else (exception instanceof NumberFormatException) { 
      ... 
     } 
     else { 
      // The catch-all handler... 
     } 
    } 
} 

Ama bence bu istisnanın her türü için ayrı haritacılarla yazmak kadar temiz değil: bir istisna superclass (yani java.lang.Exception) ve daha sonra karşı örneğin belirli istisna sınıfına bağlı olarak farklı davranışlar, sağlarlar. Bir şey için, bu haritacı tüm İstisnaları, ve başka birileri yakalayacaktır. Bu sınıf, zaman içinde gözle görülür boyutlara ulaşabilir. Belki de kod tarzı meselesi.

+1

Bunu da düşündüm; ama dediğin gibi temiz değil. Aslında; Farklı sınıflar için ExceptionMappers ve bunlardan oluşan bir üst sınıftan oluşan bir ExceptionMapper (Exception gibi) yazabilirsiniz; ve özel bir ExceptionMapper ile istisnalar bunu kullanacaktır; ve diğerleri diğerlerinin süper sınıfı olan ExceptionMapper'ı kullanacaklar. –

+1

Yine de birkaç mantıksız minik sınıf boyunca bu mantığı parçalara ayırmak ve büyük resmi görmeyi kaybetmek gibi bir dizi instanceof kontrolünü tercih ediyorum, yani ne tür istisnalar için yanıt kodlarının döndüğü – Amalgovinus

İlgili konular