كيفية نشر بيانات JSON مع Curl من Terminal / Commandline إلى اختبار Spring REST؟


Answers

حاول وضع بياناتك في ملف ، على سبيل body.json ثم استخدمها

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

أستخدم أوبونتو وتركيبة اللف على ذلك. أريد اختبار تطبيق Spring REST مع Curl. كتبت رمز POST الخاص بي في جانب جافا. ومع ذلك ، أريد اختباره مع 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

وصف الخطأ هو:

رفض الخادم هذا الطلب لأن كيان الطلب في شكل غير مدعوم من المورد المطلوب للأسلوب المطلوب ().

سجل Tomcat: "POST / ui / webapp / conf / clear HTTP / 1.1" 415 1051

أي أفكار حول التنسيق الصحيح لأمر Curl؟

تصحيح:

هذا هو رمز PUT جانبي جافا (لقد اختبرت GET و DELETE وأنها تعمل)

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



أستخدم التنسيق أدناه للاختبار باستخدام خادم الويب.

use -F 'json data'

لنفترض تنسيق تنسيق JSON هذا:

{
    'comment': {
        'who':'some_one',
        'desc' : 'get it'
    }
}

مثال كامل

curl -XPOST your_address/api -F comment='{"who":"some_one", "desc":"get it"}'



لقد عمل ذلك جيدًا بالنسبة لي ، بالإضافة إلى استخدام مصادقة BASIC:

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

بالطبع ، يجب ألا تستخدم مصادقة BASIC مطلقًا بدون SSL وشهادة محددة.

لقد واجهت هذا مرة أخرى اليوم ، باستخدام cegl's cull 7.49.1 لنظام التشغيل Windows ... وعند استخدام --data أو --data-binary مع وسيطة JSON ، تم تشويش cURL وسيؤدي إلى تفسير {} في JSON كعنوان URL قالب. إضافة وسيطة -g لإيقاف تشغيل cURL globbing ذلك.

راجع أيضًا تمرير عنوان URL مع قوسين للتجويف .




على سبيل المثال ، أنشئ ملف 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



إذا كنت تختبر الكثير من عمليات الإرسال / الاستجابات من JSON مقابل واجهة RESTful ، فقد تحتاج إلى التحقق من المكون الإضافي Postman لـ Chrome (الذي يسمح لك بتعريف اختبارات خدمة الويب يدويًا) وأمر Newman المستند إلى Node.js رفيق خط (الذي يسمح لك بأتمتة الاختبارات ضد "مجموعات" من اختبارات Postman.) على حد سواء حرة ومفتوحة!




أستخدم JSON في طلبي وبسيطة مثل:

curl -X POST -H "Content-Type: application / json" -d '{"params1": "value1"، "params2": "value2"} hostname: port / api

ولكن إذا كان لديك عدد كبير من المعلمات تفضل دائمًا استخدام ملف لهيئة طلب JSON على النحو التالي:

curl -X POST -H "Content-Type: application / json" -F "data=@/users/suchi/dekstop/JSON_request.txt" hostname: port / api




أنا فقط واجهت نفس المشكلة. يمكنني حلها عن طريق تحديد

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



عملت لي باستخدام:

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 بسيط مع خاصية معرف.




يمكنك استخدام Postman مع واجهة المستخدم الرسومية بديهية لتجميع الأمر cURL الخاص بك.

  1. تثبيت وبدء ساعي البريد
  2. اكتب عنوان URL الخاص بك ، Post Body ، Request Headers إلخ.
  3. انقر على Code
  4. حدد cURL من القائمة المنسدلة
  5. انسخ أمر cURL والصقه

ملاحظة: هناك العديد من الخيارات لإنشاء طلب تلقائي في القائمة المنسدلة ، ولهذا السبب اعتقدت أن منصبي كان ضروريًا في المقام الأول.