2009-12-07 11 views
38

मैंसर्वलेट एपीआई में अनुरोध विधि स्थिरांक कहां हैं?

if ("POST".equals(req.getMethod())) 

के बजाय

if (POST.equals(req.getMethod())) 

लिखना चाहते हैं लेकिन मैं सर्वलेट एपीआई में निरंतर परिभाषाएँ नहीं मिल सकता है (केवल, HttpServletRequest में देखा जहां मैं उन्हें उम्मीद है)।

वे कहां हैं (मैं पुस्तकालयों का उपयोग कर रहा हूं, इसलिए यदि कोई और उन्हें परिभाषित करता है, तो यह भी काम करेगा)?

+0

मैं थोड़ा के आसपास poked

तो आप उपयोग कर सकते है मुख्य जावा क्लास लाइब्रेरी में थोड़ा सा भी ... उन्हें 'java.net.HttpURLConnection' में भी नहीं, वहां भी स्थिरांक के रूप में नहीं मिला। – Powerlord

+0

याद रखना महत्वपूर्ण है ~ क्यों ~ हार्डकोडिंग खराब है। हार्डकोडिंग मान (1) पठनीयता के लिए खराब हो सकते हैं ("बॉब ने 3849 का उपयोग क्यों किया?") या (2) बग का कारण बनता है: एक स्थान में एक मूल्य बदलने पर आपको इसे दूसरे में बदलने की आवश्यकता होती है (और आप इसे केवल बदलते हैं एक)। 2 मामले में, यह मान एक चर/स्थिर में रखा जाना चाहिए और केवल एक बार बदल दिया जाना चाहिए। "POST" के बजाय POST का उपयोग करने से या तो (1) या (2) को चोट नहीं पहुंची है, इसलिए "हार्डकोडेड" मान का उपयोग करना ठीक है। –

उत्तर

20

ऐसा लगता है कि जावा ईई 6 स्थिरांक के रूप में जोड़ा HTTP विधि के नाम javax.ws.rs.HttpMethod एनोटेशन इंटरफेस के लिए। आपके सेटअप के आधार पर, वे आपके लिए उपलब्ध हो सकते हैं।

http://docs.oracle.com/javaee/6/api/javax/ws/rs/HttpMethod.html

+1

उपयोगी यदि आप जैक्स-आरएस का उपयोग कर रहे हैं, लेकिन आप सही हैं, तो यह स्थिरांक के लिए एक अस्पष्ट स्थान है - उन्हें संभवतः सर्वलेट एपीआई में स्थानांतरित किया जाना चाहिए। –

12

जहां तक ​​मुझे पता है, उस विशेष संपत्ति के लिए कोई स्थिरांक नहीं है। हालांकि, उपलब्ध है, यह देखने के लिए आप full list of constants देख सकते हैं।

बेशक, यदि आप अपने कोड को लिखना आसान बनाते हैं तो आप हमेशा अपने स्थिरांक को परिभाषित कर सकते हैं।

+1

तब javax.servlet में नहीं है। अजीब बात है कि वे मूल सामग्री को याद करते हैं, लेकिन DIGEST_AUTH का निरंतर है ... – Thilo

+0

कम से कम उनके पास सभी HTTP स्टेटस कोड हैं। – Thilo

+1

@ मैट यह सही था जब आपने उत्तर दिया लेकिन जावा 6 के बाद से, उन स्थिरांक मौजूद हैं।कृपया अपडेट करें :) –

12

इन स्थिरांक, सर्वलेट में निजी के रूप में परिभाषित कर रहे हैं

public abstract class HttpServlet extends GenericServlet 
    implements java.io.Serializable 
{ 
    private static final String METHOD_DELETE = "DELETE"; 
    private static final String METHOD_HEAD = "HEAD"; 
    private static final String METHOD_GET = "GET"; 
    private static final String METHOD_OPTIONS = "OPTIONS"; 
    private static final String METHOD_POST = "POST"; 
    private static final String METHOD_PUT = "PUT"; 
    private static final String METHOD_TRACE = "TRACE"; 
... 

यह सिर्फ शाब्दिक विधि नाम का उपयोग पूरी तरह से ठीक है। JDK की

+2

यह बहुत अच्छा है, लेकिन वे फ़ील्ड निजी हैं !!! –

1

यदि आप क्यों वहाँ किसी भी enums इस के लिए परिभाषित नहीं कर रहे हैं, यह है कि इस सवाल-जवाब में बताया गया है: Why HttpRequest.HttpMethod is string instead of Enum?

नीचे लाइन, HTTP कल्पना तरीकों के सेट की अनुमति को सीमित नहीं करता , इसलिए उन तरीकों से अतिरिक्त विधियों का उपयोग किया जा सकता है जिन्हें स्पष्ट रूप से वर्णित किया गया है।

+0

तो ऐसा लगता है कि .NET में इन स्ट्रिंग स्थिरांक हैं जिनमें जावा की कमी है। – Thilo

7

वसंत में (ताकि JDK के बाहर, भी) आप का उपयोग कर सकते हैं:

org.springframework.web.bind.annotation.RequestMethod 

यह एक enum जो सभी HTTP तरीके प्रदान करता है RequestMethod.POST.name()

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