2015-03-17 9 views
5

ड्रॉपविज़ार्ड से नया 404 http स्थिति कैसे वापस कर सकता हूं! क्या वैसे भी है कि मैं एपिस से मैन्युअल रूप से अलग-अलग http स्टेटस कोड वापस कर सकता हूं? मूल रूप से इस तरह कुछ!मैं ड्रॉपविज़ार्ड

@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; 
} 

उत्तर

6

मैं प्रतिक्रिया में आपके वास्तविक डोमेन ऑब्जेक्ट को वापस करने के बजाय जेएक्स-आरएस प्रतिक्रिया ऑब्जेक्ट का उपयोग करने की सलाह दूंगा। यह आपकी प्रतिक्रिया वस्तु के साथ मेटाडाटा सहित के लिए एक उत्कृष्ट मानक के रूप में कार्य करता है और स्थिति कोड, हेडर, ग्राहक सामग्री प्रकार से निपटने के लिए एक अच्छा बिल्डर प्रदान करता है, आदि

//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

कमाल, यह वही है जो मैं ढूंढ रहा था! – nightograph

+0

@nightograph मदद करने में खुशी हुई! – th3morg

+0

ड्रॉपविज़ार्ड दस्तावेज़ कहता है कि वेब एप्लिकेशन को फेंकना एक प्रतिक्रिया वापस करने के लिए पसंद किया जाना चाहिए (http://dropwizard.io/manual/core.html#responses देखें), जो आपकी जर्सी संसाधन कक्षाओं को और अधिक टेस्टेबल बनाता है। लेकिन हाँ, दोनों काम करते हैं। –

9

यह WebApplicationException फेंकने जितना आसान है।

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

आप आगे के साथ आप कस्टम अपवाद read more about here जो आप कर सकते हैं एक साथ रखा करने के लिए चाहते हो सकता है मिल के रूप में।

+0

सीएफ बाहर dropwizard डॉक एक कस्टम स्थिति कोड वापस करना चाहते हैं की जरूरत नहीं है #responses –

4

सबसे आसान तरीका है एक Optional<MyObject> वापस जाने के लिए है। यदि आप ड्रॉपविज़ार्ड-जावा 8 बंडल का उपयोग करते हैं तो ड्रॉपवार्ड स्वचालित रूप से 404 फेंक देगा जब आपका परिणाम Optional.absent() या Optional.empty() होगा।

बस कार्य करें:

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

जाहिर है आप या अमरूद के लिए Optional.fromNullable(get(id))Optional.ofNullable(get(id)) लौटने Java8 बंडल के लिए द्वारा अनुसार अपने डीएओ अपडेट करना होगा। http://dropwizard.io/manual/core.html:

कस्टम के साथ Response वस्तुओं के आसपास खेलने के लिए जब तक आप की 200 और 404

+0

सुरुचिपूर्ण और महान काम करता है (dw 1.0.3, जावा 8)। अगर मैं कर सकता तो मैं इसे स्वीकार्य उत्तर दूंगा – Andrejs

संबंधित मुद्दे