क्या जावा में HTTP प्रतिसाद कोड के लिए एक पूर्ण एनम है?


267

मैं सोच रहा था कि कुछ मानक जावा क्लास लाइब्रेरी में एक एनुम प्रकार है जो सभी वैध HTTP प्रतिक्रिया कोड के लिए प्रतीकात्मक स्थिरांक को परिभाषित करता है। यह इसी पूर्णांक मूल्यों से / में रूपांतरण का समर्थन करना चाहिए।

मैं कुछ जावा कोड डिबग कर रहा हूं जो javax.ws.rs.core.Response.Status का उपयोग करता है। यह काम करता है, लेकिन यह केवल वैध HTTP प्रतिक्रिया कोड के लगभग आधे को परिभाषित करता है।

जवाबों:


280

मुझे नहीं लगता कि मानक जावा कक्षाओं में पूरा होने वाला एक है; HttpURLConnectionजैसे कुछ कोड गायब हैं HTTP 100/Continue

अपाचे HttpCompenders में एक पूरी सूची है, हालांकि:
org.apache.http.HttpStatus( org.apache.commons.HttpClient.HttpStatusअपाचे Http क्लाइंट से बदल दिया गया है, जो जीवन में पहुंच गया )


5
"पूर्ण सूची" जैसी कोई चीज नहीं है, क्योंकि स्थिति कोड हो सकते हैं और विस्तारित हो सकते हैं।
जूलियन रेसके ने

16
@JulianReschke मुझे लगता है कि यहां "पूर्ण" का मतलब "मानक द्वारा उल्लिखित सभी कोड के अनुरूप" होना चाहिए।
जॉन Feminella

2
जॉन: "मानक" स्थिति कोड "सभी" को परिभाषित नहीं करता है। इसलिए एक रजिस्ट्री है।
जूलियन रेसके ने

1
iana.org/assignments/http-status-codes/http-status-codes.xml में कोड सहित बड़ी सूची है = 100
Garis M Suero

1
@ डोनल: फिर से, एक अच्छी सूची नहीं। क्या प्रासंगिक है IANA रजिस्ट्री।
जूलियन रेसचेक

66

javax.servlet.http.HttpServletResponseसर्वलेट एपीआई के इंटरफ़ेस में intस्थिरांक नामों के रूप में सभी प्रतिक्रिया कोड हैं SC_<description>Http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.html देखें


3
HttpServletResponse RFC1945 और RFC2616 मानकों के भाग का समर्थन करता है, लेकिन यह RFC2518 के सभी गायब है। यदि आपको पूरी सूची की आवश्यकता है, तो HttpStatus देखें जैसा कि मैंने उल्लेख किया है।
जॉन फेमिनाला

2
HttpServletResponse भी 418 प्रतिक्रिया कोड में परिभाषित याद आ रही है आरएफसी 2324
daiscog

एक सर्वलेट के बाहर चलने वाली किसी भी चीज़ में HttpServletResponse का उपयोग करने से विभिन्न सर्वलेट कलाकृतियों में अतिव्यापी कक्षाओं के कारण हीरे की निर्भरता की समस्या पैदा हो सकती है।
इलियट रस्टी हैरोल्ड

51

खैर, HttpURLConnection वर्ग में सटीक पूर्णांक मानों के स्थिर स्थिरांक हैं


6
धन्यवाद! यह बिना किसी बाहरी निर्भरता के काम करता है। java.net.HttpURLConnection.HTTP_BAD_REQUEST
कोमनाद

अच्छा है कि यह मानक पुस्तकालय का हिस्सा लेकिन दुर्भाग्य से यह अधूरा है - 400 रेंज उदाहरण के लिए यह 415 पर कटौती में
tschumann

18

यदि आप स्प्रिंग का उपयोग कर रहे हैं, तो 3.x रिलीज़ में आपकी तलाश है: http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/http/Http://atus.html


3
मैं जोड़ने के लिए है कि स्प्रिंग्स org.springframework.http.HttpStatus (चाहते हैं docs.spring.io/spring/docs/current/javadoc-api/org/... ) enum, केवल एक ही मुझे लगता है कि मिल सकता है लिंक के साथ जावा प्रलेखन प्रदान करता है प्रत्येक कोड में स्टेटस कोड और उनके उपयोग की पूरी सूची। यदि आप पहले से ही स्प्रिंग का उपयोग कर रहे हैं तो यह उपयोग करने के लिए पुस्तकालय होगा।
अंतिममनोरथ

2
इसमें 100 और 418 हैं। दया है कि आपको HttpStatus.XXX.value()इंट पाने के लिए कॉल करना होगा।
पश्चिमीगुण

7

यदि आप Netty का उपयोग कर रहे हैं , तो आप उपयोग कर सकते हैं:


दुर्भाग्य से यह कोई अनमोल नहीं है इसलिए मामले के बयानों (जो मुझे दुखी करता है) में प्रयोग करने योग्य नहीं है
फ्रेडरिक रोथ

7

हर कोई आपके प्रश्न के "enum type" भाग को नज़रअंदाज़ करता नज़र आ रहा है।

जबकि HTTP स्थिति कोड के लिए कोई विहित स्रोत नहीं है, आपके प्रोजेक्ट में किसी भी अतिरिक्त निर्भरता को जोड़े बिना आपके द्वारा प्रदान की गई किसी भी लापता स्थिति स्थिरांक को जोड़ने का एक सरल तरीका है javax.ws.rs.core.Response.Status

javax.ws.rs.core.Response.Statusjavax.ws.rs.core.Response.StatusTypeइंटरफ़ेस का सिर्फ एक कार्यान्वयन है । आपको बस अपने इच्छित कार्यान्वयन की स्थिति कोड के लिए परिभाषाओं के साथ Enum बनाने की आवश्यकता है जो आप चाहते हैं।

कोर पुस्तकालयों जैसे जेवैक्स, जर्सी, आदि को इंटरफ़ेस के लिए लिखा जाता StatusTypeहै कार्यान्वयन नहीं Status(या वे निश्चित रूप से होना चाहिए)। जब से आपकी नई स्थिति लागू होती है, StatusTypeइसका उपयोग किसी भी स्थान पर किया जा सकता है जिसे आप एक javax.ws.rs.core.Response.Statusस्थिरांक का उपयोग करेंगे ।

बस याद रखें कि StatusTypeइंटरफ़ेस के लिए आपका अपना कोड भी लिखा जाना चाहिए । यह आपको "मानक" वाले पक्ष के साथ अपने स्वयं के स्थिति कोड दोनों का उपयोग करने में सक्षम करेगा।

यहां "सूचनात्मक 1xx" स्थिति कोड के लिए परिभाषित स्थिरांक के साथ एक सरल कार्यान्वयन के साथ एक जिस्ट है: https://gist.github.com/avendasora/a5ed9acf6b1ee709a14a


5

Javax.servlet.http.HttpServletResponse वर्ग का उपयोग करें

उदाहरण:

javax.servlet.http.HttpServletResponse.SC_UNAUTHORIZED //401
javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR //500

4
ग्राहक विकास के लिए, इन कोडों को लेने के लिए संपूर्ण सर्वलेट एपीआई को शामिल करना बोझ है।
जेफरी बट्टमैन

1
यह कुछ मामलों के लिए बोझिल हो सकता है, लेकिन मुझे यह अच्छा जवाब मिल गया है और मैं एक सर्वलेट-आधारित वेब ऐप लिख रहा हूं, इसलिए यह मेरे लिए अच्छा है।
आंद्रेई रैनिया

2
एक डुप्लिकेट उत्तर, तीन साल बाद पोस्ट किया गया? हटा देना चाहिए।
zb226

4

1) कारण पाठ पाने के लिए यदि आपके पास केवल कोड है, तो आप उपयोग कर सकते हैं:

org.apache.http.impl.EnglishReasonPhraseCatalog.INSTANCE.getReason(httpCode,null)

httpCodeHTTP प्रतिक्रिया से आपको कारण कोड कहां मिलेगा।

देखें https://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/impl/EnglishReasonPhraseCatalog.html जानकारी के लिए

2) कारण कोड प्राप्त करने के लिए यदि आपके पास केवल पाठ है, तो आप उपयोग कर सकते हैं BasicHttpResponse

विवरण के लिए यहां देखें: https://hc.apache.org/httpcompenders-core-ga/httpcore/apidocs/org/apache/http/message/BasicHttpResponse.html


2

रेस्टलेट स्टेटस क्लास भी देखें:

http://www.restlet.org/documentation/1.1/api/org/restlet/data/Status.html


फिर; स्थिति कोड एक्स्टेंसिबल हैं, इसलिए वहाँ एक "पूर्ण" सूची नहीं किया जा सकता, जब तक यह हर संशोधित है एक नई स्थिति कोड IANA रजिस्ट्री (में जोड़ा जाता है iana.org/assignments/http-status-codes )
जूलियन Reschke

0

Http स्थिति कोड स्थिरांक के लिए सबसे अच्छा प्रदाता जेट्टी के org.eclipse.jetty.http.ttpStatus वर्ग होने की संभावना है क्योंकि:

  • maven में एक javadoc पैकेज है जो महत्वपूर्ण है यदि आप स्थिरांक की खोज करते हैं और केवल संख्या जानते हैं -> केवल एपी डॉक्स पृष्ठ खोलें और संख्या की खोज करें
  • स्थिरांक में स्थिति कोड संख्या स्वयं होती है।

केवल एक चीज मैं सुधार करूंगा: जब आप कोड के साथ शुरू कर रहे हों तो ऑटो-कम्प्लीट लुकअप को और अधिक प्रभावी बनाने के लिए टेक्स्ट विवरण के सामने स्टेटस कोड नंबर डालें।


-1

एक अन्य विकल्प HttpStatusअपाचे कॉमन्स-httpclient से क्लास का उपयोग करना है जो आपको कॉन्स्टेंट के रूप में विभिन्न Http स्टेटस प्रदान करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.