SORU
24 ŞUBAT 2009, Salı


JAX-RS, hata işleme özelleştirmek için nasıl / Jersey?

JAX-RS (, genel amaçlı-311 aka) kullanarak Jersey öğreniyorum. Başarıyla Kök bir Kaynak yarattık ve çevresinde parametreleri ile oynuyorum:

@Path("/hello")
public class HelloWorldResource {

    @GET
    @Produces("text/html")
    public String get(
        @QueryParam("name") String name,
        @QueryParam("birthDate") Date birthDate) {

         // Return a greeting with the name and age
    }
}

Bu harika çalışıyor, ve Date(String) kurucusu (YYYY/mm/dd, mm/dd/YYYY gibi) tarafından anlaşıldığı mevcut yerel herhangi bir biçimde işler. Ama eğer geçersiz veya anlaşılmayan bir değer kaynağı, 404 karşılık verirler.

Örneğin:

GET /hello?name=Mark&birthDate=X

404 Not Found

Nasıl bu davranışı özelleştirebilirsiniz miyim? Belki farklı bir yanıt kodu (muhtemelen "400 hatalı İstek")? Ne bir hata günlüğü hakkında? Belki de sorunun bir açıklama Ekle ("") kötü tarih biçimi sorun giderme yardım için özel bir başlık mı? Ya 5 XX durum kodu ile birlikte detayları ile tüm Hata yanıt verir,?

CEVAP
1 Mart 2009, Pazar


JAX-RS ile hata davranışını özelleştirmek için çeşitli yaklaşımlar vardır. Burada daha kolay yolları vardır.

İlk yaklaşım WebApplicationException uzanan Özel bir sınıf oluşturmaktır.

Örnek:

public class NotAuthorizedException extends WebApplicationException {
     public NotAuthorizedException(String message) {
         super(Response.status(Response.Status.BAD_REQUEST)
             .entity(message).type(MediaType.TEXT_PLAIN).build());
     }
}

Ve bu At için yeni bir özel Durum oluşturmak sadece:

@Path("accounts/{accountId}/")
    public Item getItem(@PathParam("accountId") String accountId) {
       // An unauthorized user tries to enter
       throw new NotAuthorizedException("You Don't Have Permission");
}

Dikkat edin, bir özel durum WebApplicationException çalışma zamanı bir İstisna olduğu için yan atar bildirmek gerek yok. Bu müşteri için bir 401 yanıt dönecektir.

İkinci ve daha kolay bir yaklaşım sadece WebApplicationException örneği kodunuzda doğrudan oluşturmaktır. Bu yaklaşım, kendi uygulama İstisna uygulamak zorunda değilsiniz sürece çalışır.

Örnek:

@Path("accounts/{accountId}/")
public Item getItem(@PathParam("accountId") String accountId) {
   // An unauthorized user tries to enter
   throw new WebApplicationException(Response.Status.UNAUTHORIZED);
}

Bu kod çok istemci için bir 401 verir.

Tabii ki, bu sadece basit bir örnek. İstisna gerekirse çok daha karmaşık yapabilirsiniz, ve hiç gerek yanıt kodu http oluşturabilirsiniz.

Bir diğer yaklaşım varolan bir Durum, belki de ExceptionMapper arabirimi @Sağlayıcısı açıklama ile açıklamalı uygulayan küçük bir sarıcı sınıf bir ObjectNotFoundException sarmak için. Bu ise sarılmış Durum ortaya çıkar, yanıt kodu ExceptionMapper tanımlanan döndüren JAX-RS çalışma zamanı bildirir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • jbignacio

    jbignacio

    13 Mart 2006
  • sknbp

    sknbp

    16 Kasım 2006
  • TastyTuts | Creative video tutorials by Gareth David

    TastyTuts |

    6 Temmuz 2011