json - स्प्रिंग आरईएसटी परीक्षण करने के लिए टर्मिनल/कमांडलाइन से कर्ल के साथ जेएसओएन डेटा कैसे पोस्ट करें?
rest spring-mvc (12)
आप अपने cURL
कमांड को इकट्ठा करने के लिए Postman को अपने अंतर्ज्ञानी जीयूआई के साथ उपयोग कर सकते हैं।
- पोस्टमैन स्थापित करें और शुरू करें
- अपने यूआरएल, पोस्ट बॉडी, अनुरोध हेडर आदि टाइप करें। पीपी।
-
Code
पर क्लिक करें - ड्रॉप-डाउन सूची से
cURL
चयन करें - अपने
cURL
कमांड को कॉपी और पेस्ट करें
नोट: ड्रॉप-डाउन सूची में स्वचालित अनुरोध पीढ़ी के लिए कई विकल्प हैं, इसलिए मैंने सोचा कि मेरी पोस्ट पहले स्थान पर उपलब्ध थी।
मैं उबंटू का उपयोग करता हूं और उस पर कर्ल स्थापित करता हूं। मैं कर्ल के साथ अपने वसंत आरईएसटी आवेदन का परीक्षण करना चाहता हूँ। मैंने जावा पक्ष में अपना पोस्ट कोड लिखा था। हालांकि, मैं इसे कर्ल के साथ परीक्षण करना चाहता हूं। मैं एक JSON डेटा पोस्ट करने की कोशिश कर रहा हूं। एक उदाहरण डेटा इस तरह है:
{"value":"30","type":"Tip 3","targetModule":"Target 3","configurationGroup":null,"name":"Configuration Deneme 3","description":null,"identity":"Configuration Deneme 3","version":0,"systemId":3,"active":true}
मैं इस आदेश का उपयोग करता हूं:
curl -i \
-H "Accept: application/json" \
-H "X-HTTP-Method-Override: PUT" \
-X POST -d "value":"30","type":"Tip 3","targetModule":"Target 3","configurationGroup":null,"name":"Configuration Deneme 3","description":null,"identity":"Configuration Deneme 3","version":0,"systemId":3,"active":true \
http://localhost:8080/xx/xxx/xxxx
यह इस त्रुटि को देता है:
HTTP/1.1 415 Unsupported Media Type
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=utf-8
Content-Length: 1051
Date: Wed, 24 Aug 2011 08:50:17 GMT
त्रुटि विवरण यह है:
सर्वर ने इस अनुरोध को अस्वीकार कर दिया क्योंकि अनुरोध इकाई एक प्रारूप में है जो अनुरोधित विधि () के लिए अनुरोधित संसाधन द्वारा समर्थित नहीं है।
टॉमकैट लॉग: "पोस्ट / यूई / वेबएप / conf / clear HTTP / 1.1" 415 1051
कर्ल कमांड के सही प्रारूप के बारे में कोई विचार?
संपादित करें:
यह मेरा जावा साइड पुट कोड है (मैंने परीक्षण किया है और हटा दिया है और वे काम करते हैं)
@RequestMapping(method = RequestMethod.PUT)
public Configuration updateConfiguration(HttpServletResponse response, @RequestBody Configuration configuration) { //consider @Valid tag
configuration.setName("PUT worked");
//todo If error occurs response.sendError(HttpServletResponse.SC_NOT_FOUND);
return configuration;
}
आप यूआरएल के अंत के रूप में इच्छित प्रारूप का विस्तार पास कर सकते हैं। जैसे http://localhost:8080/xx/xxx/xxxx .json
या
http://localhost:8080/xx/xxx/xxxx .xml
नोट: आपको अपने पोम में जैक्सन और जैक्सब मेवेन निर्भरता जोड़ने की जरूरत है।
आपको आराम से उपयोगी मिल सकता है: https://github.com/micha/resty
यह एक रैपर दौर कर्ल है जो कमांड लाइन आरईएसटी अनुरोधों को सरल बनाता है। आप इसे अपने एपीआई एंडपॉइंट पर इंगित करते हैं, और यह आपको पुट और पोस्ट कमांड देता है। (होमपेज से अनुकूलित उदाहरण)
$ resty http://127.0.0.1:8080/data #Sets up resty to point at your endpoing
$ GET /blogs.json #Gets http://127.0.0.1:8080/data/blogs.json
#Put JSON
$ PUT /blogs/2.json '{"id" : 2, "title" : "updated post", "body" : "This is the new."}'
# POST JSON from a file
$ POST /blogs/5.json < /tmp/blog.json
साथ ही, सामग्री प्रकार शीर्षलेख जोड़ने के लिए अक्सर भी आवश्यक है। हालांकि, आप एक बार डिफ़ॉल्ट रूप से सेट कर सकते हैं, प्रति कॉन्फ़िगरेशन फ़ाइलों को प्रति-विधि जोड़ने के लिए: डिफ़ॉल्ट RESTY विकल्प सेट करना
उदाहरण के तौर पर, एक JSON फ़ाइल, params.json बनाएं, और इस सामग्री को इसमें जोड़ें:
[
{
"environment": "Devel",
"description": "Machine for test, please do not delete!"
}
]
फिर आप यह आदेश चलाते हैं:
curl -v -H "Content-Type: application/json" -X POST --data @params.json -u your_username:your_password http://localhost:8000/env/add_server
पार्टी के लिए थोड़ा देर हो चुकी है, लेकिन मुझे यह पोस्ट नहीं दिखाई देता है, इसलिए यहां जाता है, आप अपने जेसन को एक फाइल में भी डाल सकते हैं और इसे मानक इनपुट के माध्यम से - फ़ाइल अपलोड विकल्प का उपयोग करके कर्ल में पास कर सकते हैं, जैसे:
echo 'my.awesome.json.function({"do" : "whatever"})' | curl -X POST "http://url" -T -
मैं एक वेब सर्वर के साथ परीक्षण करने के लिए नीचे प्रारूप का उपयोग कर रहा हूँ।
use -F 'json data'
आइए इस JSON dict प्रारूप को मान लें:
{
'comment': {
'who':'some_one',
'desc' : 'get it'
}
}
पूरा उदाहरण
curl -XPOST your_address/api -F comment='{"who":"some_one", "desc":"get it"}'
यदि आप एक वास्तविक इंटरफ़ेस के खिलाफ बहुत से JSON भेज / प्रतिक्रियाओं का परीक्षण कर रहे हैं, तो आप क्रोम के लिए Postman प्लग-इन देखना चाहते हैं (जो आपको वेब सेवा परीक्षणों को मैन्युअल रूप से परिभाषित करने की अनुमति देता है) और इसके नोड.जेएस-आधारित Newman कमांड -लाइन साथी (जो आपको पोस्टमैन परीक्षणों के "संग्रह" के खिलाफ परीक्षण स्वचालित करने की अनुमति देता है।) दोनों स्वतंत्र और खुले!
यह मेरे लिए अच्छा काम करता है, इसके अतिरिक्त बेसिक प्रमाणीकरण का उपयोग करता है:
curl -v --proxy '' --basic -u Administrator:password -X POST -H "Content-Type: application/json"
--data-binary '{"value":"30","type":"Tip 3","targetModule":"Target 3","configurationGroup":null,"name":"Configuration Deneme 3","description":null,"identity":"Configuration Deneme 3","version":0,"systemId":3,"active":true}'
http://httpbin.org/post
बेशक, आपको एसएसएल और चेक किए गए प्रमाण पत्र के बिना कभी भी बेसिक प्रमाणीकरण का उपयोग नहीं करना चाहिए।
मैं विंडोज़ के लिए सिग्विन के कर्ल 7.4 9 .1 का उपयोग करके आज फिर से इसमें भाग गया ... और जब JSON तर्क के साथ --data
या --data-binary
का उपयोग करते समय, --data
उलझन में आया और JSON में URL के रूप में {}
व्याख्या करेगा टेम्पलेट। कर्ल ग्लोबिंग को बंद करने के लिए ए-डी तर्क जोड़ना तय किया गया है।
यह मेरे लिए उपयोग करने के लिए काम किया:
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"id":100}' http://localhost/api/postJsonReader.do
यह स्प्रिंग नियंत्रक को खुशी से मैप किया गया था:
@RequestMapping(value = "/postJsonReader", method = RequestMethod.POST)
public @ResponseBody String processPostJsonData(@RequestBody IdOnly idOnly) throws Exception {
logger.debug("JsonReaderController hit! Reading JSON data!"+idOnly.getId());
return "JSON Received";
}
आईडी आईडी एक संपत्ति के साथ एक साधारण POJO है।
यह मेरे लिए काम किया:
curl -H "Content-Type: application/json" -X POST -d @./my_json_body.txt http://192.168.1.1/json
HTTPie curl
लिए एक अनुशंसित विकल्प है क्योंकि आप बस कर सकते हैं
$ http POST http://example.com/some/endpoint name=value name1=value1
यह डिफ़ॉल्ट रूप से जेएसओएन बोलता है और आपके लिए आवश्यक हेडर सेट करने और साथ ही डेटा को वैध JSON के रूप में एन्कोड करने के लिए दोनों को संभालेगा। वहाँ भी:
Some-Header:value
हेडर के लिए, और
name==value
क्वेरी स्ट्रिंग पैरामीटर के लिए। यदि आपके पास डेटा का एक बड़ा हिस्सा है, तो आप इसे फ़ाइल से भी पढ़ सकते हैं, यह JSON एन्कोडेड है:
[email protected]
body.json
और फिर उपयोग करें, अपने डेटा को फ़ाइल में डालने का प्रयास करें
curl -H "Content-Type: application/json" --data @body.json http://localhost:8080/ui/webapp/conf