मैं HttpClient के माध्यम से एक GET REST कॉल कर रहा हूं:

HttpClient client = HttpClient.newHttpClient();

 HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(endpoint)
            .GET()
            .header("Authorization", authHeader)
            .header("Content-Type", "application/json")
            .build();

    HttpResponse<String> response = client.send(request,
            HttpResponse.BodyHandlers.ofString());

मैं MyObject ऑब्जेक्ट में प्रतिक्रिया को कैसे मैप कर सकता हूं? क्या इसे पहले स्ट्रिंग के रूप में रोकना सही है? भी, मुझे पथ पैरामीटर के रूप में एक स्ट्रिंग पास करने की आवश्यकता होगी लेकिन मुझे नहीं पता कि इसे कहां जोड़ना है। सहायता का शुक्रिया!!

2
Prodox21 11 अगस्त 2021, 18:20

2 जवाब

सबसे बढ़िया उत्तर

इसके लिए आमतौर पर इस्तेमाल की जाने वाली एक अन्य लाइब्रेरी जैक्सन ऑब्जेक्टमैपर है। ऑब्जेक्टमैपर का उपयोग करके, आप शरीर को इस तरह से किसी ऑब्जेक्ट पर मैप कर सकते हैं:

String json = response.body(); // "{ \"name\" : \"Nemo\", \"type\" : \"Fish\" }";
Animal nemo = objectMapper.readValue(json, Animal.class);

चरण-दर-चरण मार्गदर्शिका के लिए, https देखें: //www.baeldung.com/jackson-object-mapper-tutorial#2-json-to-java-object

1
Steve 11 अगस्त 2021, 17:53

आपकी समस्या के लिए विभिन्न दृष्टिकोण हैं।

  1. सबसे आसान: Gson का इस्तेमाल करें, जो किसी दिए गए ऑब्जेक्ट प्रकार (<कोड के बजाय) के लिए JSON प्रतिक्रिया को स्वचालित रूप से मैप कर सकता है >theJsonString आप InputStream या इसी तरह का कोई भी पास कर सकते हैं):
Gson gson = new GsonBuilder().create();
gson.fromJson(theJsonString, MyObject.class);
  1. माध्यम: आप जो कर रहे हैं वह पहले से ही सही है। आपको केवल उस String को पार्स करने की आवश्यकता है जो आप अपने MyObject को प्राप्त कर रहे हैं।

  2. कठिन: आप अपना खुद का HttpResponse.BodyHandler<MyObject> लिख सकते हैं, जो प्रतिक्रिया को MyObject में बदल देता है।

यदि आप बाहरी पुस्तकालयों का उपयोग करने में सक्षम हैं, तो निश्चित रूप से Gson या समान का उपयोग करें।

0
ThexXTURBOXx 11 अगस्त 2021, 15:37