java - Apache HttpClient का उपयोग कर JSON अनुरोध कैसे पोस्ट करें?




post apache-commons-httpclient (2)

मेरे पास कुछ ऐसा है:

final String url = "http://example.com";

final HttpClient httpClient = new HttpClient();
final PostMethod postMethod = new PostMethod(url);
postMethod.addRequestHeader("Content-Type", "application/json");
postMethod.addParameters(new NameValuePair[]{
        new NameValuePair("name", "value)
});
httpClient.executeMethod(httpMethod);
postMethod.getResponseBodyAsStream();
postMethod.releaseConnection();

यह 500 के साथ वापस आ रहा है। सेवा प्रदाता का कहना है कि मुझे JSON भेजने की आवश्यकता है। Apache HttpClient 3.1+ के साथ यह कैसे किया जाता है?


अपाचे एचटीपी क्लाइंट JSON के बारे में कुछ भी नहीं जानता है, इसलिए आपको अपना JSON अलग से बनाना होगा। ऐसा करने के लिए, मैं json.org से सरल JSON-java लाइब्रेरी की जांच करने की अनुशंसा करता json.org । (यदि "JSON-Java" आपके अनुरूप नहीं है, तो json.org की विभिन्न भाषाओं में उपलब्ध पुस्तकालयों की एक बड़ी सूची है।)

एक बार जब आप अपना JSON जेनरेट कर लेंगे, तो आप इसे पोस्ट करने के लिए नीचे दिए गए कोड की तरह कुछ उपयोग कर सकते हैं

StringRequestEntity requestEntity = new StringRequestEntity(
    JSON_STRING,
    "application/json",
    "UTF-8");

PostMethod postMethod = new PostMethod("http://example.com/action");
postMethod.setRequestEntity(requestEntity);

int statusCode = httpClient.executeMethod(postMethod);

संपादित करें

नोट - उपरोक्त उत्तर, जैसा कि प्रश्न में पूछा गया है, Apache HttpClient 3.1 पर लागू होता है। हालांकि, नवीनतम अपाचे क्लाइंट के खिलाफ किसी भी कार्यान्वयन की तलाश में किसी की भी मदद करने के लिए:

StringEntity requestEntity = new StringEntity(
    JSON_STRING,
    ContentType.APPLICATION_JSON);

HttpPost postMethod = new HttpPost("http://example.com/action");
postMethod.setEntity(requestEntity);

HttpResponse rawResponse = httpclient.execute(postMethod);

जैसा कि जैनोसाइड द्वारा उत्कृष्ट उत्तर में बताया गया है , आपको JSON स्ट्रिंग बनाने और इसे स्ट्रिंग StringEntity रूप में सेट करने की StringEntity

JSON स्ट्रिंग का निर्माण करने के लिए, आप किसी लाइब्रेरी या विधि का उपयोग कर सकते हैं जिसके साथ आप सहज हैं। जैक्सन लाइब्रेरी एक आसान उदाहरण है:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;

ObjectMapper mapper = new ObjectMapper();
ObjectNode node = mapper.createObjectNode();
node.put("name", "value"); // repeat as needed
String JSON_STRING = node.toString();
postMethod.setEntity(new StringEntity(JSON_STRING, ContentType.APPLICATION_JSON));




apache-commons-httpclient