2014-10-30 12 views
6

İstenilen bir kaynak bulamadığı zaman sunucunun (bana değil) attığı 404 yanıtını özelleştirmek istiyorum (veya özelleştirilmiş bir WebApplicationException atayın) Tek bir uygulamada istenen bir kaynağın var olup olmadığını test etmek mümkün mü, muhtemelen bir kaynak listesi bir yerde saklanır mı?). lütfen WebApplicationException'ı uzatmayı öneren çözümleri önermeyin, çünkü bunu yaparken bile, sorunum ne zaman atılacağıdır? Ancak bu gereksinimi, bir bitiş noktası bulamadığında jersey çerçevesindekiNerede HttpServer bir kaynak bulamadığı zaman özelleştirilmiş 404 hata atmak

+0

Şimdiye kadar ne denediniz? 'ExceptionMapper' yardımcı olabilir ... – zyexal

+0

Jersey hangi sürümü kullanıyorsunuz? –

+0

Jersey 2.x olması, grizzly-http-server 2.3.0 ile, burada örnekleri deniyorum [link] (https://github.com/jersey/jersey/tree/master/examples) –

cevap

9

Jersey throwsjavax.ws.rs.NotFoundException. Seçtiğiniz bir yanıta dönüştürmek için bir istisna eşleştiricisi kullanın:

import javax.ws.rs.NotFoundException; 
import javax.ws.rs.core.Response; 
import javax.ws.rs.ext.ExceptionMapper; 
import javax.ws.rs.ext.Provider; 

@Provider 
public class NotFoundExceptionMapper implements ExceptionMapper<NotFoundException> { 

    public Response toResponse(NotFoundException exception) { 
     return Response.status(Response.Status.NOT_FOUND) 
       .entity("No such resource") 
       .build(); 
    } 
} 
+1

thank ama maalesef kodunuzu ekledikten sonra, ana sınıfımın bulunduğu aynı pakete ve "curl -g -i http: // localhost: 8080/base/@@@ 11" yi çalıştırıyorum. Bildiğim kadarıyla 'Sağlayıcı' sunucuya söylemek için burada bir kaynak bulunamadığı zaman bu sınıf atmak, bu doğru mu? o zaman nasıl çalışır ?! –

+0

Bunu bir yere kaydetmem gerektiğini sanmıyorum, doğru mu? –

+0

Paket taramasını yapılandırdıysanız ve belirtilen pakete bir sağlayıcı yerleştirdiyseniz, o zaman çalışmalıdır. JAX-RS'de birçok sağlayıcı türü vardır (daha fazla bilgi için: http://stackoverflow.com/questions/13557442/what-does-provider-in-jax-rs-mean). ExceptionMappers, ele almak ve özel bir yanıt üretmek istediğiniz herhangi bir özel durumu yakalamanıza olanak tanır. Bu durumda, eşleşen bir kaynak bulunmadığında sunucu tarafından atıldığından NotFoundException ile çalışıyoruz. –