2011-12-28 15 views
6

मैं नेटटी का उपयोग कर रहा हूं, और मुझे http POST अनुरोधों को स्वीकार और पार्स करना होगा। जहां तक ​​मैं कह सकता हूं, नेटटी के पास POST के लिए अंतर्निहित समर्थन नहीं है, केवल जीईटी है। (यह एक बहुत कम स्तर की लाइब्रेरी है जो आदिम नेटवर्क संचालन से संबंधित है। एक सर्वलेट कंटेनर का उपयोग करना, जो यह सब सामान बॉक्स से बाहर करता है, एक विकल्प नहीं है।)जावा में http POST डेटा को डीकोड कैसे करें?

यदि मेरे पास POST अनुरोध की सामग्री है बाइट्स की एक सरणी, पैरामीटर के मानचित्र में इसे पार्स करने के लिए सबसे तेज़ और सबसे बग-मुक्त तरीका क्या है?

मैं इसे स्वयं लिख सकता हूं, लेकिन वहां जेडीके में बनाए गए कुछ तरीके हो सकते हैं जो इसे आसान बनाते हैं। और मैं शर्त लगाऊंगा कि कुछ गठिया और कोने के मामले सौदा करने के लिए हैं।

+0

क्या आप जो करने की कोशिश कर रहे हैं उसका नमूना कोड दे सकते हैं? – mossplix

उत्तर

13

Netty एक उन्नत पोस्ट अनुरोध विकोडक (HttpPostRequestDecoder) जो डिकोड कर सकते हैं Http गुण, chunked एन्कोडिंग के साथ FileUpload सामग्री है ले लो।

यहाँ

public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { 
    HttpRequest request = (HttpRequest) e.getMessage(); 
    HttpPostRequestDecoder decoder = new HttpPostRequestDecoder(new DefaultHttpDataFactory(false), request); 

    InterfaceHttpData data = decoder.getBodyHttpData("fromField1"); 
    if (data.getHttpDataType() == HttpDataType.Attribute) { 
    Attribute attribute = (Attribute) data; 
    String value = attribute.getValue() 
    System.out.println("fromField1 :" + value); 
    } 
} 
+0

क्या आप निश्चित हैं? मैंने उस वर्ग को गुगल किया, और "नेटटी एक्सटेंशन" नामक एक तिहाई पार्टी लाइब्रेरी मिली जिसमें यह है। यह है कि आप किस बारे में बात कर रहे हैं? – ccleve

+0

क्षमा करें मैं नेटटी 4.0.एक्स का जिक्र कर रहा था जो अभी तक उपलब्ध नहीं है। जैसा कि आपने कहा है, नेटी एक्सटेंशन लाइब्रेरी से HttpPostRequestDecoder, जिसे अब Netty 4.0.X के साथ विलय किया गया है। आप इसे यहां से डाउनलोड कर सकते हैं http://sourceforge.net/projects/goldengate/files/NettyExtension/1.1.9/ –

+0

हम जेसन सामग्री-प्रकार के साथ http pst अनुरोध को कैसे डीकोड कर सकते हैं? –

2

आप किस नेटटी का उपयोग कर रहे हैं? नेटी के HttpRequest POST विधि का समर्थन करता है। किसी भी लाइब्रेरी से अवगत नहीं है जो परम के मानचित्र पर बाइट पार्स कर सकता है। आमतौर पर यह एक सर्वलेट कंटेनर करता है। एक() कैसे वे processParameters को लागू किया है पर बिल्ला के स्रोत पर नज़र विधि http://svn.apache.org/repos/asf/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/Parameters.java

+0

यह सहायक है। ऐसा लगता है कि वे बाइट्स के माध्यम से मार्च करते हैं और '=' और '&' पर विभाजित होते हैं। मुझे कुछ ऐसा करना पड़ सकता है। – ccleve

6

आप Netty 4.x. में HttpPostRequestDecoder उपयोग कर सकते हैं एक सरल डिकोडिंग उदाहरण रूप है यह सभी प्रकार के पोस्ट बॉडी का समर्थन करता है। नेटटी 4.x इस समय अल्फा के रूप में चिह्नित है, लेकिन बहुत स्थिर है। Xitrum में BodyParser देखें।

यदि आपको केवल साधारण शरीर को पार्स करने की आवश्यकता है, तो आप अभी भी "शरीर" के बाद भाग की तरह शरीर के उपचार के द्वारा नेटटी 3.x में QueryStringDecoder का उपयोग कर सकते हैं। यूआरएल में, इस तरह:

QueryStringDecoder decoder = new QueryStringDecoder("?" + 
    request.getContent.toString(org.jboss.netty.util.CharsetUtil.UTF_8)); 
+0

हम जेसन सामग्री-प्रकार के साथ http pst अनुरोध को कैसे डीकोड कर सकते हैं? –

+1

अनुरोध निकाय से JSON स्ट्रिंग प्राप्त करें, फिर जैक्सन (जावा) या JSON4S (स्कैला) जैसे JSON प्रोसेसिंग लाइब्रेरी का उपयोग इसे संसाधित करने के लिए करें: 'स्ट्रिंग jsonString = request.getContent.toString (org.jboss.netty.util .CharsetUtil.UTF_8); ' –

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