json - स्प्रिंग आरईएसटी परीक्षण करने के लिए टर्मिनल / कमांडलाइन से कर्ल के साथ जेएसओएन डेटा कैसे पोस्ट करें?




rest spring-mvc curl (15)

मैं उबंटू का उपयोग करता हूं और उस पर कर्ल स्थापित करता हूं। मैं कर्ल के साथ अपने वसंत आरईएसटी आवेदन का परीक्षण करना चाहता हूँ। मैंने जावा पक्ष में अपना पोस्ट कोड लिखा था। हालांकि, मैं इसे कर्ल के साथ परीक्षण करना चाहता हूं। मैं एक 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;
} 

Answers

यह मेरे लिए उपयोग करने के लिए काम किया:

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 है।


HTTPie curl लिए एक अनुशंसित विकल्प है क्योंकि आप बस कर सकते हैं

$ http POST http://example.com/some/endpoint name=value name1=value1

यह डिफ़ॉल्ट रूप से जेएसओएन बोलता है और आपके लिए आवश्यक हेडर सेट करने और साथ ही डेटा को वैध JSON के रूप में एन्कोड करने के लिए दोनों को संभालेगा। वहाँ भी:

Some-Header:value

हेडर के लिए, और

name==value

क्वेरी स्ट्रिंग पैरामीटर के लिए। यदि आपके पास डेटा का एक बड़ा हिस्सा है, तो आप इसे फ़ाइल से भी पढ़ सकते हैं, यह JSON एन्कोडेड है:

 [email protected]

मैं एक वेब सर्वर के साथ परीक्षण करने के लिए नीचे प्रारूप का उपयोग कर रहा हूँ।

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"}'

यह मेरे लिए अच्छा काम किया।

curl -X POST --data @json_out.txt http://localhost:8080/

कहा पे,

-X http क्रिया का मतलब है।

--data डेटा उस डेटा का अर्थ है जिसे आप भेजना चाहते हैं।


यह मेरे लिए काम किया:

curl -H "Content-Type: application/json" -X POST -d @./my_json_body.txt http://192.168.1.1/json

उदाहरण के तौर पर, एक 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

body.json और फिर उपयोग करें, अपने डेटा को फ़ाइल में डालने का प्रयास करें

curl -H "Content-Type: application/json" --data @body.json http://localhost:8080/ui/webapp/conf

आपको आराम से उपयोगी मिल सकता है: 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 विकल्प सेट करना


आप अपने cURL कमांड को इकट्ठा करने के लिए Postman को अपने अंतर्ज्ञानी जीयूआई के साथ उपयोग कर सकते हैं।

  1. पोस्टमैन स्थापित करें और शुरू करें
  2. अपने यूआरएल, पोस्ट बॉडी, अनुरोध हेडर आदि टाइप करें। पीपी।
  3. Code पर क्लिक करें
  4. ड्रॉप-डाउन सूची से cURL चयन करें
  5. अपने cURL कमांड को कॉपी और पेस्ट करें

नोट: ड्रॉप-डाउन सूची में स्वचालित अनुरोध पीढ़ी के लिए कई विकल्प हैं, इसलिए मैंने सोचा कि मेरी पोस्ट पहले स्थान पर उपलब्ध थी।


विंडोज के लिए, -d वैल्यू के लिए एक सिंगल कोटेशन मेरे लिए काम नहीं करता था, लेकिन यह डबल कोट में बदलने के बाद काम करता था। इसके अलावा मुझे घुंघराले ब्रैकेट के अंदर डबल कोट्स से बचने की जरूरत थी।

यही है, निम्नलिखित काम नहीं किया था:

curl -i -X POST -H "Content-Type: application/json" -d '{"key":"val"}' http://localhost:8080/appname/path

लेकिन निम्नलिखित काम किया:

curl -i -X POST -H "Content-Type: application/json" -d "{\"key\":\"val\"}" http://localhost:8080/appname/path

यदि आप एक वास्तविक इंटरफ़ेस के खिलाफ बहुत से JSON भेज / प्रतिक्रियाओं का परीक्षण कर रहे हैं, तो आप क्रोम के लिए Postman प्लग-इन देखना चाहते हैं (जो आपको वेब सेवा परीक्षणों को मैन्युअल रूप से परिभाषित करने की अनुमति देता है) और इसके नोड.जेएस-आधारित Newman कमांड -लाइन साथी (जो आपको पोस्टमैन परीक्षणों के "संग्रह" के खिलाफ परीक्षण स्वचालित करने की अनुमति देता है।) दोनों स्वतंत्र और खुले!


मैं बस एक ही समस्या में भाग गया। मैं इसे निर्दिष्ट करके हल कर सकता हूं

-H "Content-Type: application/json; charset=UTF-8"

कर्ल विंडोज का उपयोग करके, इसे आजमाएं:

curl -X POST -H "Content-Type:application/json" -d "{\"firstName\": \"blablabla\",\"lastName\": \"dummy\",\"id\": \"123456\"}" http-host/_ah/api/employeeendpoint/v1/employee

आपको अपनी सामग्री-प्रकार को एप्लिकेशन / जेसन पर सेट करने की आवश्यकता है। लेकिन -d सामग्री-प्रकार application/x-www-form-urlencoded भेजता है, जिसे स्प्रिंग के पक्ष में स्वीकार नहीं किया जाता है।

कर्ल मैन पेज को देखते हुए, मुझे लगता है कि आप -H :

-H "Content-Type: application/json"

पूरा उदाहरण:

curl --header "Content-Type: application/json" \
  --request POST \
  --data '{"username":"xyz","password":"xyz"}' \
  http://localhost:3000/api/login

( -H --header लिए --header , --data )

ध्यान दें कि -request POST वैकल्पिक है यदि आप -d उपयोग करते हैं, क्योंकि -d ध्वज एक POST अनुरोध का तात्पर्य है।

विंडोज़ पर, चीजें थोड़ा अलग हैं। टिप्पणी धागा देखें।








json rest spring-mvc curl