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



9 Answers

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

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

أستخدم أوبونتو وتركيبة اللف على ذلك. أريد اختبار تطبيق 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;
} 



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

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




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



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

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



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




لقد عمل ذلك جيدًا بالنسبة لي ، بالإضافة إلى استخدام مصادقة 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 في ملف وتمريره إلى curl باستخدام - خيار تحميل الملفات عبر الإدخال القياسي ، مثل هذا:

 echo 'my.awesome.json.function({"do" : "whatever"})' | curl -X POST "http://url" -T -



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

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



أنشئ ملف JSON "MyData.json" وأضف محتوى:

[
    {
        "Key_one": "Value_one",
        "Key_two": "Value_two",
        "Key_three": "Value_three"
    }
]

بعد ذلك ، تحتاج إلى تشغيل الأمر التالي:

curl -v -H "Content-Type: application/json" -X POST --data @MyData.json -u USERNAME:PASSWORD http://localhost:8000/env/add_server





Related