Wie schicke ich JSON-Daten mit Curl von Terminal / Commandline an Spring REST testen?


Answers

Versuchen Sie, Ihre Daten in eine Datei zu stellen, sagen Sie body.json und verwenden Sie sie dann

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

Ich benutze Ubuntu und installiere Curl darauf. Ich möchte meine Spring REST-Anwendung mit Curl testen. Ich habe meinen POST-Code auf der Java-Seite geschrieben. Allerdings möchte ich es mit Curl testen. Ich versuche, JSON-Daten zu veröffentlichen. Ein Beispieldaten sind wie folgt:

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

Ich benutze diesen Befehl:

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

Es gibt diesen Fehler zurück:

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

Die Fehlerbeschreibung lautet wie folgt:

Der Server hat diese Anforderung abgelehnt, da die Anforderungseinheit ein Format aufweist, das von der angeforderten Ressource für die angeforderte Methode () nicht unterstützt wird.

Tomcat-Protokoll: "POST / UI / Webanwendung / Conf / Clear HTTP / 1.1" 415 1051

Irgendwelche Ideen über das richtige Format des Curl-Befehls?

BEARBEITEN:

Dies ist mein Java-Side-PUT-Code (Ich habe GET und DELETE getestet und sie funktionieren)

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



Wenn Sie viele JSON-Sendevorgänge / -Antworten gegen eine REST-konforme Schnittstelle testen, sollten Sie das Postman Plug-in für Chrome (mit dem Sie Webdiensttests manuell definieren können) und den Node.js-basierten Newman Befehl ausprobieren -Line-Begleiter (mit dem Sie Tests gegen "Sammlungen" von Postman-Tests automatisieren können.) Sowohl frei als auch offen!




Sie können Postman mit seiner intuitiven GUI verwenden, um Ihren cURL Befehl zusammenzustellen.

  1. Installieren und starten Sie Postbote
  2. Geben Sie Ihre URL, Post-Body, Request Header usw. pp.
  3. Klicken Sie auf Code
  4. Wählen Sie cURL aus der Dropdown-Liste
  5. Kopieren und fügen Sie Ihren cURL Befehl ein

Hinweis: In der Dropdown-Liste gibt es mehrere Optionen für die automatisierte Anfrageerstellung, weshalb ich meinen Beitrag von Anfang an für notwendig hielt.




Ich stoße einfach auf das gleiche Problem. Ich könnte es lösen, indem ich spezifiziere

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



Ich benutze JSON in meiner Anwendung und es ist einfach wie folgt:

curl -X POST -H "Inhaltstyp: application / json" -d '{"params1": "value1", "params2": "value2"} Hostname: Port / api

Aber wenn Sie eine große Anzahl von Parametern haben, bevorzugen Sie immer eine Datei mit dem JSON-Anfragetext wie folgt:

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




Es funktionierte für mich mit:

curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"id":100}' http://localhost/api/postJsonReader.do

Es wurde erfreulicherweise dem Spring-Controller zugeordnet:

@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 ist ein einfaches POJO mit einer ID-Eigenschaft.




Erstellen Sie als Beispiel eine JSON-Datei params.json und fügen Sie diesen Inhalt hinzu:

[
    {
        "environment": "Devel",
        "description": "Machine for test, please do not delete!"
    }
]

Dann führen Sie diesen Befehl aus:

curl -v -H "Content-Type: application/json" -X POST --data @params.json -u your_username:your_password http://localhost:8000/env/add_server



Ich verwende das folgende Format, um mit einem Webserver zu testen.

use -F 'json data'

Nehmen wir dieses JSON-Format an:

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

Vollständiges Beispiel

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



Dies funktionierte gut für mich, zusätzlich mit BASIC-Authentifizierung:

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

Natürlich sollten Sie niemals die BASIC-Authentifizierung ohne SSL und ein geprüftes Zertifikat verwenden.

Ich bin heute noch einmal darüber gestolpert und habe --data cURL 7.49.1 für Windows verwendet ... Und wenn --data oder --data-binary mit einem JSON-Argument verwendete, war cURL verwirrt und interpretierte das {} im JSON als URL Vorlage. Das Hinzufügen eines Arguments -g zum Ausschalten von cURL-Globbing hat das behoben.

Siehe auch Übergeben einer URL mit eckigen Klammern .






Related