multiple - Wie man JSON-Daten mit Curl von Terminal/Commandline an Spring REST testet?




php curl json (13)

Das hat für mich funktioniert:

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

Ich benutze Ubuntu und installiere Curl darauf. Ich möchte meine Spring REST-Anwendung mit Curl testen. Ich habe meinen POST-Code auf Java-Seite geschrieben. Ich möchte es jedoch mit Curl testen. Ich versuche, JSON-Daten zu posten. 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:

Der Server hat diese Anforderung abgelehnt, da die Anforderungsentität in einem Format vorliegt, das von der angeforderten Ressource für die angeforderte Methode () nicht unterstützt wird.

Tomcat-Protokoll: "POST / ui / webapp / conf / clear HTTP / 1.1" 415 1051

Irgendwelche Ideen zum richtigen Format des Curl-Befehls?

BEARBEITEN:

Dies ist mein Java-seitiger 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;
} 

Das hat gut für mich funktioniert.

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

Woher,

-X Bedeutet das http-Verb.

--data die Daten, die Sie senden möchten.


Ein bisschen zu spät zur Party, aber ich sehe das nicht als gepostet, also könnten Sie Ihren Json auch in eine Datei legen und ihn mit der Option --file-upload über die Standardeingabe an curl übergeben.

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

Erstellen Sie die JSON-Datei "MyData.json" und fügen Sie Inhalt hinzu:

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

Danach müssen Sie den folgenden Befehl ausführen:

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

Es hat für mich funktioniert mit:

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

Es wurde glücklich 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 einfacher POJO mit einer ID-Eigenschaft.


Ich habe gerade das gleiche Problem. Ich könnte es durch Angabe lösen

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

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

use -F 'json data'

Nehmen wir an, dieses JSON-Dict-Format:

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

Vollständiges Beispiel

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

Resty kann nützlich sein: https://github.com/micha/resty

Es handelt sich um eine Wrapper-Round-CURL, die REST-Anforderungen für Befehlszeilen vereinfacht. Sie verweisen auf Ihren API-Endpunkt und geben Ihnen die Befehle PUT und POST. (Beispiele von der Homepage angepasst)

$ 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

Außerdem ist es häufig noch erforderlich, die Content Type-Header hinzuzufügen. Sie können dies jedoch einmal tun, um einen Standard für das Hinzufügen von Konfigurationsdateien pro Methode pro Site festzulegen : Festlegen von Standard-RESTY-Optionen



Sie müssen Ihren Inhaltstyp auf application / json setzen. -d sendet jedoch die Content-Type- application/x-www-form-urlencoded , die von Spring nicht akzeptiert wird.

Wenn ich die curl-Manpage betrachte , denke ich, kannst du -H :

-H "Content-Type: application/json"

Vollständiges Beispiel:

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

( -H steht für --header , -d für --data )

Beachten Sie, dass -request POST optional ist, wenn Sie -d , da das Flag -d eine POST-Anforderung impliziert.

Unter Windows sind die Dinge etwas anders. Siehe den Kommentarthread.


Versuchen Sie es mit CURL Windows:

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

Versuchen Sie, Ihre Daten in einer Datei zu speichern, sagen Sie " body.json und verwenden Sie dann

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

HTTPie ist eine empfohlene Alternative zu curl da Sie dies nur tun können

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

Es spricht standardmäßig JSON und wird sowohl die Einstellung des erforderlichen Headers als auch das Kodieren von Daten sowie gültiges JSON vornehmen. Es gibt auch:

Some-Header:value

für Überschriften und

name==value

für Abfragezeichenfolgeparameter. Wenn Sie einen großen Datenblock haben, können Sie ihn auch aus einer Datei lesen, indem er JSON-codiert ist:

 [email protected]




curl