2015-03-17 14 views
5

'dan 404 http durumunu nasıl döndürebilirim? apis'ten farklı http durum kodlarını el ile iade edebildiğim var mı? temelde buna benzer bir şey!dropwizard'a dropwizard

@GET 
@Timed 
public MyObject getMyObject(@QueryParam("id") Optional<String> id) { 
    MyObj myObj = myDao.getMyObject(id) 
    if (myObj == null) { 
      //return status.NOT_FOUND; // or something similar 
      // or more probably 
      // getResponseObjectFromSomewhere.setStatus(mystatus) 

    } 

    return myObj; 
} 

cevap

6

Gerçek etki alanı nesnesini yanıtta döndürmek yerine JAX-RS Yanıt nesnesini kullanmanızı öneririm. Bu vs.

//import javax.ws.rs.core.Response above 
@GET 
@Timed 
public Response getMyObject(@QueryParam("id") Optional<String> id) { 
    MyObject myObj = myDao.getMyObject(id) 
    if (myObj == null) { 
    //you can also provide messaging or other metadata if it is useful 
    return Response.status(Response.Status.NOT_FOUND).build() 
    } 
    return Response.ok(myObj).build(); 
} 
+0

harika, tam olarak aradığım şey bu! – nightograph

+0

@nightograph yardım etmekten memnunum! – th3morg

+0

Dropwizard dokümanı, WebApplicationException'ı atmanın, bir Yanıt döndürme (http://dropwizard.io/manual/core.html#responses) için tercih edilmesinin gerektiğini belirtir. Bu, forma kaynak sınıflarınızı daha test edilebilir yapar. Ama evet, her ikisi de işe yarar. –

9

WebApplicationException'u atmak kadar basit.

@GET 
@Timed 
public MyObject getMyObject(@QueryParam("id") Optional<String> id) { 
    MyObject myObj = myDao.getMyObject(id) 
    if (myObj == null) { 
    throw new WebApplicationException(404); 
    } 
    return myObj; 
} 

daha fazla özel istisnalar yapabilirsiniz read more about here araya isteyebilirsiniz geçinmeye gibi.

+0

cf dışında özel bir durum kodu dönmek istemiyorsanız özel ile Response nesneleri oynamak için gerek yoktur # Responses –

4

basit yolu bir Optional<MyObject> döndürmektir, yanıtınız cisimle meta dahil olmak üzere mükemmel bir standart olarak hizmet vermekte ve durum kodlarını, başlıklar, müşteri içerik türlerini işlemek için güzel bir oluşturucu sağlar. Dropwizard-java8 demetini kullanırsanız, sonuç Optional.absent() veya Optional.empty() olduğunda otomatik olarak bir 404 atar.

Hemen yapın:

@GET 
@Timed 
public Optional<MyObject> getMyObject(@QueryParam("id") Optional<String> id) { 
    Optional<MyObject> myObjOptional = myDao.getMyObject(id) 
    return myObjOptional; 
} 

Açıkçası Java8 paket için Guava için Optional.fromNullable(get(id)) veya Optional.ofNullable(get(id)) döndürerek göre sizin DAO güncellemeniz gerekir. http://dropwizard.io/manual/core.html:

Eğer dropwizard doc 200 ve 404

+0

Şık ve harika çalışıyor (dw 1.0.3, java 8 için geçerli bir link)). Bunu kabul edersem kabul edebilirdim – Andrejs

İlgili konular