টার্মিনাল/কমান্ডলাইন থেকে স্প্রিং রিস্টেস্ট থেকে কার্ল সহ JSON ডেটা পোস্ট করতে কিভাবে?




rest spring-mvc (12)

আমি উবুন্টু ব্যবহার করি এবং এটিতে কার্ল ইনস্টল করি। আমি কার্ল সঙ্গে আমার বসন্ত REST অ্যাপ্লিকেশন পরীক্ষা করতে চান। আমি জাভা পাশে আমার পোষ্ট কোড লিখেছি। যাইহোক, আমি কার্ল দিয়ে এটি পরীক্ষা করতে চাই। আমি একটি 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

ত্রুটি বর্ণনা এই হল:

সার্ভার এই অনুরোধ প্রত্যাখ্যান করেছে কারণ অনুরোধ সত্তা একটি ফর্ম্যাটে রয়েছে অনুরোধকৃত পদ্ধতি () এর জন্য অনুরোধকৃত সংস্থানের দ্বারা সমর্থিত নয়।

টম্যাট লগ: "পোস্ট / ui / ওয়েবপ্যাফ / conf / clear HTTP / 1.1" 415 1051

কার্ল কমান্ডের সঠিক বিন্যাস সম্পর্কে কোন ধারনা?

সম্পাদনা করুন:

এটি আমার জাভা পার্শ্ব PUT কোড (আমি GET পরীক্ষা করেছি এবং মুছে ফেলা এবং তারা কাজ করে)

@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;
} 

Curl উইন্ডোজ ব্যবহার করে, এটি চেষ্টা করুন:

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

আপনি আপনার cURL কমান্ড একত্রিত করার জন্য তার স্বজ্ঞাত GUI সহ Postman ব্যবহার করতে পারেন।

  1. ইনস্টল করুন এবং পোস্টম্যান শুরু করুন
  2. আপনার ইউআরএল টাইপ করুন, পোস্টের দেহ, অনুরোধ শিরোনাম ইত্যাদি।
  3. Code উপর ক্লিক করুন
  4. ড্রপ ডাউন তালিকা থেকে cURL নির্বাচন করুন
  5. কপি এবং আপনার cURL কমান্ড পেস্ট করুন

দ্রষ্টব্য: ড্রপ-ডাউন তালিকাতে স্বয়ংক্রিয় অনুরোধ প্রজন্মের জন্য বেশ কয়েকটি বিকল্প রয়েছে, তাই আমার মনে হয়েছিল যে আমার পোস্টটি প্রথম স্থানে নেই।


আপনি ইউআরএল শেষ হিসাবে আপনি চান বিন্যাস এক্সটেনশন পাস করতে পারেন। http://localhost:8080/xx/xxx/xxxx .json মত

অথবা

http://localhost:8080/xx/xxx/xxxx .xml

দ্রষ্টব্য: আপনার পামে জ্যাকসন এবং জ্যাক্সব মেনন নির্ভরতা যুক্ত করতে হবে।


আপনি বিশ্রামজনক খুঁজে পেতে পারেন: https://github.com/micha/resty

এটি একটি wrapper round curl যা কমান্ড লাইন REST অনুরোধগুলিকে সরল করে। আপনি এটিকে আপনার API এপয়েন্টয়েন্টিতে নির্দেশ করুন এবং এটি আপনাকে PUT এবং POST কমান্ড দেয়। (হোমপেজ থেকে অভিযোজিত উদাহরণ)

$ 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 বিকল্পগুলি নির্ধারণ করা হচ্ছে


আমি শুধু একই সমস্যা মধ্যে চালানো। আমি নির্দিষ্ট করে এটি সমাধান করতে পারে

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

উইন্ডোজের জন্য, -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

এই আমার জন্য ভাল কাজ।

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

কোথায়,

-X HTTP ক্রিয়া মানে।

--data আপনি যে ডেটা পাঠাতে চান তার মানে।


একটি ফাইলের মধ্যে আপনার তথ্য রাখতে চেষ্টা করুন, body.json বলুন এবং তারপর ব্যবহার করুন

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

এটা ব্যবহার করে আমার জন্য কাজ করেছে:

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

IdOnly একটি আইডি সম্পত্তি সঙ্গে একটি সহজ POJO হয়।


এটি বেসিক প্রমাণীকরণ ব্যবহার করে আমার জন্য ভাল কাজ করেছে:

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

অবশ্যই, আপনি SSL এবং একটি চেক করা শংসাপত্র ছাড়া বেসিক প্রমাণীকরণ ব্যবহার করা উচিত নয়।

আমি উইন্ডোজ এর জন্য সিগুইন এর ক্রুয়াল 7.49.1 ব্যবহার করে আজ আবার এই দৌড়ে গিয়েছিলাম ... এবং যখন একটি JSON যুক্তি দিয়ে --data বা --data-binary ব্যবহার করে, তখন কার্ল বিভ্রান্ত হয়ে পড়ে এবং {} একটি URL হিসাবে JSON এ ব্যাখ্যা করবে টেমপ্লেট. কুলুঙ্গ globbing যে বন্ধ নির্দিষ্ট করার জন্য একটি -G যুক্তি যোগ করা।

বন্ধনী করতে বন্ধনী সহ একটি URL পাস এছাড়াও দেখুন।


যদি আপনি অনেকগুলি JSON একটি RESTful ইন্টারফেসের বিরুদ্ধে প্রতিক্রিয়া / প্রতিক্রিয়া পরীক্ষা করছেন তবে আপনি Chrome এর জন্য Postman প্ল্যাগ-ইনটি দেখতে চাইতে পারেন (যা আপনাকে ওয়েব পরিষেবা পরীক্ষাগুলি ম্যানুয়ালি সংজ্ঞায়িত করার অনুমতি দেয়) এবং এর Node.js- ভিত্তিক Newman কমান্ড -লাইন সহচর (যা আপনাকে পোস্টম্যান পরীক্ষার "সংগ্রহ" বিরুদ্ধে স্বয়ংক্রিয় পরীক্ষাগুলি করতে দেয়।) উভয় বিনামূল্যে এবং খোলা!


HTTPie curl একটি প্রস্তাবিত বিকল্প কারণ আপনি ঠিক করতে পারেন

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

এটি ডিফল্টরূপে JSON কথা বলে এবং আপনার জন্য প্রয়োজনীয় শিরোনাম সেটিং উভয় পাশাপাশি বৈধ JSON হিসাবে এনকোডিং ডেটা পরিচালনা করবে। এছাড়াও আছে:

Some-Header:value

হেডার, এবং জন্য

name==value

প্রশ্ন স্ট্রিং পরামিতি জন্য। যদি আপনার কাছে তথ্য একটি বৃহৎ অংশ থাকে, আপনি একটি ফাইল থেকে এটি পড়তে JSON এনকোড করা হতে পারে:

 [email protected]




curl