2011-05-23 7 views
26

मैं जेएसओएन या ऐसा कुछ भी नहीं उपयोग कर रहा हूं। मेरे पास फ़ाइल अपलोड करने के लिए एक सरल रूप है और मैं फॉर्म के पैरामीटर को पढ़ना चाहता हूं। नीचे दिया गया कोड अपेक्षित काम नहीं कर रहा है। यह कोई पैरामीटर नहीं दिखाएगा।मैं जर्सी का उपयोग कर एक विश्वसनीय सेवा के लिए POST पैरामीटर कैसे पढ़ूं?

@POST 
@Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
@Path("{appNum}/{docId}/file") 
public Response uploadDocFile(
     @PathParam("appNum") String appNum, 
     @PathParam("docId") String docId, 
     @Context HttpServletRequest req) 
{ 

    try { 

     log.info("POST Parameters:"); 

     Enumeration e = req.getParameterNames(); 

     while(e.hasMoreElements()) 
     { 
      Object key = e.nextElement(); 
      log.info("Key: " + key); 
      log.info("Val: " + req.getParameter(key.toString())); 
     } 


    } catch (Exception e) { 
     e.printStackTrace(); 
     return Response.status(Status.INTERNAL_SERVER_ERROR).entity(new StatusResponse(e)).build(); 
    } 

    return Response.ok().build(); 
} 
+0

प्रपत्र एक सामान्य HTML रूप है, मैं जानता हूँ कि इस कोड सही है: –

+1

पैरामीटर प्रस्तुत कर रहे हैं (फायरबग के साथ जांचें) – Bozho

+0

हाँ, मैंने wireshark –

उत्तर

23

एफवाईआई, आपको @FormParam का उपयोग करने की आवश्यकता है। यह भी सुनिश्चित करें कि INPUT HTML प्रकार नाम = id id = का उपयोग कर रहे हैं।

+0

के साथ सत्यापित किया है मैंने अपनी मशीन पर समस्या का पुन: उत्पन्न किया। आपको अभी भी HttpServletRequest तक पहुंचने में सक्षम होना चाहिए (http://jersey.java.net/nonav/documentation/latest/user-guide.html#d4e522 के अनुसार) और मुझे नहीं पता कि मैं क्यों असमर्थ हूं। मैंने एकाधिक सर्वलेट कंटेनर पर कोशिश की है, इसलिए अगर कोई जानता है कि ऐसा क्यों होता है तो मैं उत्सुक हूं। – stand

+0

चूंकि मैं यहां गुगलिंग के दौरान उतरा था। मैंने इसे 'सार्वजनिक प्रतिक्रिया doSomething (@Context HttpContext संदर्भ)' काम करने के लिए पाया। फिर आप 'संदर्भ' से पैरामीटर के साथ अनुरोध प्राप्त कर सकते हैं। – sunn0

19

मुझे एक ही समस्या है। व्यक्तिगत पैरामीटर के लिए @FormParam एनोटेशन का उपयोग करना, लेकिन से @Context के माध्यम से इंजेक्शन से उन्हें पढ़ना नहीं है। मैंने Provider<HttpServletRequest> और @RequestParameters<Map<String, String[]>> का उपयोग करके गुइस के माध्यम से अनुरोध ऑब्जेक्ट/पैरामीटर प्राप्त करने का भी प्रयास किया। दोनों मामलों में कोई पोस्ट पैरामीटर नहीं थे।

हालांकि, संसाधन विधि में MultivaluedMap<String, String> पैरामीटर जोड़कर पैरामीटर का मानचित्र प्राप्त करना संभव है। उदाहरण:

@POST 
public void doSomething(MultivaluedMap<String, String> formParams) { 
//... 
} 
2

(अनुरोध प्रसंस्करण के दौरान या अन्य जर्सी वस्तु) समय जर्सी ContainerServlet के कुछ बिंदु पर कॉल request.getInputStream() या request.getReader() जो 'usingInputStream' या सही पर 'usingReader' की स्थापना की। यह स्थिति अनुरोध ऑब्जेक्ट के अंदर पैरामीटर मानचित्र की जनसंख्या को रोकती है। कुछ इस तरह:

parseParameters() { 
    if (usingInputStream || usingReader) { 
     return; 
    } else { 
     parametersMap.putAll({actual parameters parsing from stream}) 
    } 
} 

Map getParametersMap() { 
    return parametersMap; 
} 

कोशिश पहले ही प्रवेश बिंदु आपके आवेदन की (जर्सी ServletContainer.service() विधि की शुरुआत) में एक को तोड़ने बिंदु डालने और मूल्यांकन request.getParametersMap() कॉल। आपको अपने पैरामीटर मिलेंगे।

5

आप जावा में Jersey RESTful API उपयोग कर रहे हैं आप के लिए देख सकते Parameter Annotations (@*Param)

उदाहरण:

निर्भरता:

<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-client</artifactId> 
    <version>1.8</version> 
</dependency> 

कोड:

package yourpack; 
import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.core.Response; 

@Path("/path_to_data") 
public class DataResource { 
    @GET 
    @Path("/{param}") 
    public Response getMsg(@PathParam("param") String urlparam) { 
     int ok = 200; 
     String result = "Jersey Data resource: " + urlparam; 

     return Response.status(ok).entity(result).build(); 
    } 
} 

एनोटेशन की सूची: @ मैट्रिक्स पैराम, @HeaderParam, @CookieParam, @FormParam, @QueryParam, @PathParam

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