2015-03-11 6 views
7

मैं अपने webservice में जेसन पैरामीटर का उपभोग कैसे कर सकता हूं, मैं @PathParam का उपयोग करके पैरामीटर प्राप्त करने में सक्षम हूं लेकिन जेसन डेटा प्राप्त करने के लिए पैरामीटर के पास कोई संकेत नहीं है कि क्या करना है।जावा आराम सेवा में जेसन पैरामीटर का उपभोग कैसे करें

@GET 
@Path("/GetHrMsg/json_data") 
@Consumes({ MediaType.APPLICATION_JSON }) 
@Produces(MediaType.APPLICATION_JSON) 
public String gethrmessage(@PathParam("emp_id") String empid) { 

}

क्या @PathParam के स्थान पर और कैसे यह बाद में पार्स करने के लिए में उपयोग करने के लिए।

उत्तर

9

मुझे लगता है कि आप अनुरोध के साथ भेजे गए एक JSON संदेश निकाय के बारे में बात कर रहे हैं।

यदि ऐसा है, तो कृपया ध्यान दें कि जब तक पूरी तरह से मना नहीं किया जाता है, तो आम सहमति है कि अनुरोध प्राप्त करें अनुरोध निकायों के पास होना चाहिए। क्यों स्पष्टीकरण के लिए "HTTP GET with request body" प्रश्न देखें।

मैं इसका केवल इसलिए उल्लेख करता हूं क्योंकि आपका उदाहरण एक GET अनुरोध दिखाता है। यदि आप पोस्ट या पुट कर रहे हैं, तो पढ़ना जारी रखें, लेकिन अगर आप वास्तव में अपने प्रोजेक्ट में जीईटी अनुरोध कर रहे हैं, तो मैं अनुशंसा करता हूं कि आप kondu's solution का पालन करें।


ने कहा कि साथ

, एक JSON या XML संदेश के मुख्य भाग का उपभोग करने के लिए, एक (unannotated) विधि पैरामीटर अपने आप में एक JAXB सेम संदेश का प्रतिनिधित्व करता है कि शामिल हैं।

तो, अपने संदेश के मुख्य भाग इस तरह दिखता है:

{"hello":"world","foo":"bar","count":123} 

तो फिर तुम एक इसी वर्ग कि इस तरह दिखता है पैदा करेगा:

@XmlRootElement 
public class RequestBody { 
    @XmlElement String hello; 
    @XmlElement String foo; 
    @XmlElement Integer count; 
} 

और आपकी सेवा विधि इस प्रकार दिखाई देगा:

@POST 
@Path("/GetHrMsg/json_data") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
public void gethrmessage(RequestBody requestBody) { 
    System.out.println(requestBody.hello); 
    System.out.println(requestBody.foo); 
    System.out.println(requestBody.count); 
} 

जो आउटपुट होगा:

world 
bar 
123 

JAXB का उपयोग कर HTTP डेटा के विभिन्न प्रकार के उपयोग के बारे में अधिक जानकारी के लिए, मैं तुम्हें सवाल "How to access parameters in a RESTful POST method" है, जो कुछ शानदार जानकारी है की जाँच की सलाह देते हैं।

+0

धन्यवाद यह मुझे त्रुटि को हल करने में मदद मिली लिए :) –

3

@PathParam पैरामीटर के रूप में यूआरएल के एक हिस्से से मेल खाने के लिए प्रयोग किया जाता है। उदाहरण के लिए http:/example.com/books/{bookid} के यूआरएल में, आप किसी विधि को किसी पुस्तक की आईडी प्राप्त करने के लिए @PathParam("bookid") का उपयोग कर सकते हैं।

@QueryParam यूआरएल की क्वेरी स्ट्रिंग (कुंजी के बाद भाग) में कुंजी/मूल्य जोड़े तक पहुंचने के लिए प्रयोग किया जाता है। उदाहरण के लिए यूआरएल http:/example.com?bookid=1 में, आप 'बुकिड' के मूल्य प्राप्त करने के लिए @QueryParam("bookid") का उपयोग कर सकते हैं।

इन दोनों का उपयोग तब किया जाता है जब अनुरोध url में पैरामीटर के बारे में कुछ जानकारी होती है और आप डेटा को सीधे अपने तरीकों से उपयोग कर सकते हैं।

यदि यह पोस्ट आपकी सहायता नहीं करता है तो कृपया विस्तार से समस्या निर्दिष्ट करें।

2

बर्टाग जीईटी पर टिप्पणी के बारे में सही है।लेकिन अगर आप पोस्ट अनुरोध है कि json डेटा की खपत क्या करना चाहते हैं, तो आप नीचे दिए गए कोड का उल्लेख कर सकते हैं:

 @POST 
     @Path("/GetHrMsg/json_data") 
     @Consumes(MediaType.APPLICATION_JSON) 
     public Response gethrmessage(InputStream incomingData) { 
      StringBuilder crunchifyBuilder = new StringBuilder(); 
      try { 
       BufferedReader in = new BufferedReader(new InputStreamReader(incomingData)); 
       String line = null; 
       while ((line = in.readLine()) != null) { 
        crunchifyBuilder.append(line); 
       } 
      } catch (Exception e) { 
       System.out.println("Error Parsing: - "); 
      } 
      System.out.println("Data Received: " + crunchifyBuilder.toString()); 

      // return HTTP response 200 in case of success 
      return Response.status(200).entity(crunchifyBuilder.toString()).build(); 
     } 

कृपया संदर्भित click here

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