2012-09-07 5 views
5

अस्वीकरण: मैंने इस प्रश्न के उत्तर के लिए पूरी तरह से खोज की, और हाँ, मुझे यह अन्य प्रश्न मिला: https://stackoverflow.com/questions/10315728/how-to-send-parameters-as-formparam-to-webservice। लेकिन सबसे पहले, यह सवाल जावास्क्रिप्ट के बारे में पूछ रहा है, जबकि मैं जावा के बारे में पूछ रहा हूं, और दूसरी बात, इसका कोई जवाब नहीं है। तो सवाल यह करने के लिए पर ...मैं किसी अन्य विधि से एक @FormParam को एक विश्वसनीय सेवा में कैसे पास कर सकता हूं?

RESTful सेवाओं के साथ

, एक @GET सेवा में @QueryParam रों गुजर, काफी आसान है के रूप में आप बस एक यूआरएल के लिए चर नाम/मान युग्म संलग्न करें और इसका इस्तेमाल के भीतर से सर्वर को हिट करने के कर सकते हैं कार्यक्रम। क्या @FormParam एस के साथ ऐसा करने का कोई तरीका है?

उदाहरण के लिए, मान लीजिए कि मैं निम्नलिखित RESTful सेवा डालते हैं:

@POST 
@Produces("application/xml") 
@Path("/processInfo") 
public String processInfo(@FormParam("userId") String userId, 
          @FormParam("deviceId") String deviceId, 
          @FormParam("comments") String comments) { 
    /* 
    * Process stuff and return 
    */ 
} 

... और मान लीजिए कि मैं भी इस तरह मेरे कार्यक्रम में कहीं और किसी अन्य विधि डालते हैं:

public void updateValues(String comments) { 

    String userId = getUserId(); 
    String deviceId = getDeviceId(); 

    /* 
    * Send the information to the /processInfo service 
    */ 

} 

कैसे क्या मैं दूसरी विधि में टिप्पणी की कार्रवाई कर सकता हूं?

नोट: मान लें कि ये विधियां एक ही कक्षा या पैकेज में नहीं हैं। यह भी मान लें कि रीस्टफुल सेवा पर अलग-अलग सर्वर पर होस्ट की गई है, जिस मशीन से आप अपनी विधि चला रहे हैं। इस प्रकार, आप विधि का उपयोग कर सकते हैं और मूल्यों को एक यथार्थ तरीके से पास कर सकते हैं।

आपकी मदद के लिए धन्यवाद!

उत्तर

6

@FormParam का उपयोग करके आप एक चर के लिए फॉर्म पैरामीटर बाध्य कर सकते हैं। आप एक नमूना here पा सकते हैं।

दूसरा, बाकी सेवा को कॉल करने के लिए आंतरिक रूप से अपना जावा विधि कोड बनाएं, आपको जर्सी क्लाइंट का उपयोग करना होगा। उदाहरण कोड here पाया जा सकता है।

आप निम्नानुसार जर्सी क्लाइंट फॉर्म का उपयोग करके फॉर्म पैरामीटर पास कर सकते हैं।

रूप

ClientConfig config = new DefaultClientConfig(); 
Client client = Client.create(config); 
WebResource service = client.resource(UriBuilder.fromUri("http://localhost:8080/api").build()); 

Form f = new Form();  
f.add("userId", "foo");  
f.add("deviceId", "bar");  
f.add("comments", "Device"); 

पास यह RESTful विधि करने के लिए बनाएँ।

service.path("processInfo").accept(MediaType.APPLICATION_XML).post(String.class,f); 

reference

+1

आप इस तरह प्रपत्र पैरामीटर पारित कर सकते हैं, उपयोग com.sun.jersey.api.representation.Form इस प्रकार है। फॉर्म एफ = नया फॉर्म(); f.add ("userId", "foo"); f.add ("deviceId", "bar"); f.add ("टिप्पणियां", "डिवाइस"); // फ़्लुएंट इंटरफेस service.path ("processInfo") स्वीकार करें (MediaType.APPLICATION_XML)। पोस्ट (स्ट्रिंग.क्लास, एफ); –

+0

यह बढ़िया है! क्या आप इसे अपने उत्तर में जोड़ सकते हैं और आखिरी पंक्ति को थोड़ा और समझा सकते हैं? यह एक: 'service.path (" processInfo ") स्वीकार करें (MediaType.APPLICATION_XML)। पोस्ट (स्ट्रिंग.क्लास, एफ) 'फिर मैं स्वीकार करूंगा। :) – asteri

+1

विशेष रूप से, 'सेवा' ऑब्जेक्ट क्या है जिसे आप 'पथ()' पर आक्रमण कर रहे हैं? – asteri