2012-12-31 67 views
14

मैं रीस्टफुल वेब सेवा विकसित करने के लिए जर्सी ढांचे का उपयोग कर रहा हूं। मैं निम्नलिखित कोड का उपयोग कर प्रतिक्रिया के साथ विभिन्न HTTP स्थिति कोड फेंक रहा हूँ:रीस्टफुल वेब सेवा में जर्सी फ्रेमवर्क का उपयोग करके HTTP 204 स्टेटस कोड कैसे फेंकना है?

public class RestNoContentException extends WebApplicationException 
{ 
    public RestNoContentException(String message) 
    { 
     super(Response.status(Status.NO_CONTENT) 
      .entity(message).type("text/plain") 
      .build()); 
     } 
} 

बाकी वेब फ़ायरफ़ॉक्स मोज़िला आराम ग्राहक उपकरण का उपयोग कर सेवा का परीक्षण है, यह 204 NO CONTENT के बजाय 200 OK स्थिति प्रदर्शित कर रहा है। मैं अन्य स्टेटस कोड को उसी तरह से संभालने में हूं जैसे मैं स्टेटस कोड 204 के लिए कर रहा हूं। अन्य स्थिति कोड आराम से ग्राहक उपकरण पर ठीक दिख रहे हैं लेकिन 204 स्थिति कोड कब प्रदर्शित करें, यह 200 OK स्थिति कोड दिखा रहा है।

क्या कोई मेरी मदद कर सकता है? मैं क्या खो रहा हूँ?

उत्तर

11

अगर आप 204 फेंक चाहते हैं तो आप इकाई नहीं देना चाहिए:

@GET 
@Produces(MediaType.TEXT_PLAIN) 
public Response test() { 
    //return Response.status(Status.NO_CONTENT).entity("hello").build(); //this will throw 200 
    return Response.status(Status.NO_CONTENT).build(); 
} 
18

पहले, 204 प्रतिक्रिया कोड "सफल" श्रेणी में है, इसलिए एक अपवाद के परिणाम के रूप में यह लौटने एक बहुत है, करने के लिए बहुत अजीब बात है।

दूसरा, 204 का मतलब है "कोई सामग्री नहीं", जिसका अर्थ है कि प्रतिक्रिया में कोई इकाई नहीं है, लेकिन आप इसमें एक डालते हैं। यह संभावना है कि जर्सी इसे आपके लिए 200 पर स्विच कर रहा है, जो मूल रूप से 204 के समान है, सिवाय इसके कि इसमें एक प्रतिक्रिया इकाई है।

अंत में, आप कुछ अंतर्निहित व्यवहारों द्वारा 204 प्रतिक्रियाएं प्राप्त कर सकते हैं: शून्य विधियों और शून्य वापसी मूल्य दोनों मानचित्र को 204 प्रतिक्रिया में प्राप्त करते हैं। अन्यथा, बस Response.status(204).build() वापस करें।

8

पहले से मौजूद प्रतिक्रियाओं में जोड़ने के लिए बस एक चीज। जर्सी कर रहा है क्या है correct behavior as for the spec:

3.3.3 वापसी प्रकार

संसाधन तरीकों वापस आ सकते हैं शून्य, प्रतिक्रिया, GenericEntity, या किसी अन्य जावा प्रकार, इन वापसी प्रकार एक प्रतिक्रिया इकाई शरीर के लिए मैप की जाती हैं निम्नानुसार है:

शून्य 204 स्थिति कोड वाले खाली इकाई निकाय में परिणाम।

प्रतिक्रिया प्रतिक्रिया की स्थिति संपत्ति द्वारा निर्दिष्ट स्थिति कोड के साथ प्रतिक्रिया की इकाई संपत्ति से मैप किए गए एक इकाई निकाय में परिणाम। एक शून्य वापसी मूल्य का परिणाम 204 स्टेटस कोड में होता है। यदि प्रतिक्रिया की स्थिति संपत्ति सेट नहीं है: गैर-शून्य इकाई संपत्ति के लिए 200 स्थिति कोड का उपयोग किया जाता है और इकाई संपत्ति शून्य होने पर 204 स्थिति कोड का उपयोग किया जाता है।

जेनेरिक एंटीटी जेनेरिक एंटीटी की इकाई संपत्ति से मैप किए गए एक इकाई निकाय में परिणाम। यदि रिटर्न वैल्यू शून्य नहीं है तो 200 स्टेटस कोड का उपयोग किया जाता है, तो शून्य वापसी मान का परिणाम 204 स्टेटस कोड में होता है।

अन्य लौटाए गए उदाहरण के वर्ग से मैप किए गए एक इकाई निकाय में परिणाम। यदि रिटर्न वैल्यू शून्य नहीं है तो 200 स्टेटस कोड का उपयोग किया जाता है, तो शून्य वापसी मान का परिणाम 204 स्टेटस कोड में होता है।

[...]

और चूंकि आप एक अपवाद का उपयोग कर रहे हैं, तो निम्न खंड लागू होता है (जोर मेरा):

3.3.4 अपवाद

एक संसाधन विधि, उप संसाधन विधि या उप -resource लोकेटर किसी भी चेक या अनचेक अपवाद फेंक सकता है। एक कार्यान्वयन करना चाहिए सभी अपवादों को पकड़ने और उन्हें प्रोसेस इस प्रकार है:

  1. WebApplicationException के उदाहरण एक प्रतिक्रिया को मैप किया जाना चाहिए इस प्रकार है। यदि अपवाद की प्रतिक्रिया संपत्ति में कोई इकाई नहीं है और अपवाद मैपिंग प्रदाता (अनुभाग 4.4 देखें) WebApplicationException के लिए उपलब्ध है, तो एक नया प्रतिक्रिया उदाहरण, बनाने के लिए प्रदाता का उपयोग करना चाहिए अन्यथा प्रतिक्रिया संपत्ति का उपयोग सीधे किया जाता है । परिणामस्वरूप प्रतिक्रिया उदाहरण धारा 3.3.3 के अनुसार संसाधित किया जाता है।

[...]

तो आप या तो अशक्त, शून्य वापसी या 204 प्रतिक्रिया का निर्माण करना चाहिए। आप केवल अपवाद फेंक देते हैं यदि यह आपके आवेदन में असाधारण मामला है और अपवाद makes this clear फेंक रहा है।

+0

हाय दोस्तों, आपकी प्रतिक्रिया के लिए बहुत बहुत धन्यवाद। –