Wie POSTE ich JSON-Daten mit Curl aus einem terminal/Kommandozeile zu Testen, Spring REST?
Ich benutze Ubuntu und installiert cURL auf Sie. Ich möchte zum testen meiner Frühlings-REST-Anwendung mit cURL. Ich schrieb meinen POST code an die Java-Seite. Allerdings habe ich es testen wollen mit cURL. Ich bin versucht zu posten ein JSON-Daten. Beispiel Daten wie diese:
{"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 dieses 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
Den Fehler Beschreibung ist diese:
Der server weigerte sich, diese Anforderung, da die Anforderungseinheit ist in einem format, das nicht unterstützt von der angeforderten Ressource für die angeforderte Methode ().
Tomcat-log:
"POST /ui/Web-App/conf/klar HTTP/1.1" 415 1051
Was das richtige format ist der cURL-Befehl?
Dies ist meine Java-Seite PUT
- code (die ich getestet habe, HOLEN und LÖSCHEN, und Sie arbeiten):
@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;
}
- Kasse der link für den Frühling 3.2.0-post-Anfragen.
- Es ist ein schöner Beitrag Verwendung von Curl Für Ad-Hoc-Testen Von Rest Microservices was deckt diese mit mehreren Beispielen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie benötigen, um Ihr content-type auf application/json. Aber
-d
sendet den Content-Type -application/x-www-form-urlencoded
, die nicht angenommen, die Feder zur Seite.Blick auf die curl Mann Seite, ich glaube, Sie verwenden können,
-H
:Vollständigen Beispiel:
(
-H
ist die Abkürzung für--header
,-d
für--data
)Beachten Sie, dass
-request POST
ist optional wenn Sie-d
als-d
flag impliziert eine POST-Anfrage.Unter Windows sind die Dinge etwas anders. Siehe auch den Kommentar-thread.
curl -X POST -H "Content-Type: application/json" -d "{ \"key1\": \"value1\" }" http://localhost:3000/api/method
"{ """key1""": """value1""" }"
. Auch diese Antwort: stackoverflow.com/questions/18314796/...STDIN
mithilfe-d @-
alscurl
optioncontentType
oderContent-Type
?"Content-Type: application/json"
, nicht nur"application/json"
. Das verschwendet eine Menge meiner Zeit...Runtime.getRuntime().exec
Methode, in linux muss ich entfernen Sie die doppelten Anführungszeichen. niemand weiß, warum?-d
oder--data
standardmäßigPOST
werden, so übernimmt die--data-urlencode
option.-d '{"username":"xyz","password":"xyz"}'
Versuchen, Ihre Daten in eine Datei, sagen
body.json
und verwenden Sie dann--data-binary
option statt--data
. Man würde erwarten, dass der client sendet die Daten als-ist, aber--data
Streifen CR und LF aus der Eingabe.@
Zeichen vor dem Namen der Datei, sonst funktioniert es nicht. Ich habe gerade 20 Minuten schlug mein Kopf auf so einen Mist...Finden Sie vielleicht resty nützlich:
https://github.com/micha/resty
Es ist eine wrapper-Runde CURL vereinfacht Befehlszeile REST-Anforderungen. Zeigen Sie es, um Ihre API-Endpunkt, und es gibt Sie PUT-und POST-Befehle. (Beispiele übernommen von der homepage)
Außerdem ist es oft noch notwendig, um den Content-Type-Header. Sie können dies tun, nachdem, obwohl, ein Standard, hinzufügen von config-Dateien-pro-Verfahren pro-Website: Festlegen von Standard-Optionen RESTY
Für Windows, eine einheitliche quote für die
-d
Wert nicht Arbeit für mich, aber es hat funktioniert, nach dem Wechsel in doppelte Anführungszeichen ein. Auch ich brauchte, um zu entkommen doppelte Anführungszeichen innerhalb von geschweiften Klammern.Ist, Folgendes hat nicht funktioniert:
Aber die folgenden gearbeitet:
Es funktionierte für mich mit:
Es wurde freudig zugeordnet, der Frühling controller:
IdOnly
ist eine einfache POJO mit einer id-Eigenschaft.Als Beispiel, erstellen Sie eine JSON-Datei params.json und fügen Sie diesen Inhalt:
Dann führen Sie diesen Befehl:
Dies funktionierte gut für mich.
Wo
-X
Bedeutet das http-verb.--data
Bedeutet, dass die Daten, die Sie senden möchten.-X POST
ist überflüssig in diesem BeispielLauf ich halt in das gleiche problem. Ich konnte es lösen, indem Sie angeben
Mithilfe von CURL Windows, versuchen Sie dies:
Können Sie Briefträger mit seiner intuitiven Benutzeroberfläche, zusammenstellen
cURL
Befehl.Code
cURL
aus der drop-down-ListecURL
BefehlHinweis: Es gibt mehrere Optionen für den automatisierten Anfrage-generation, die in der drop-down-Liste, die ist, warum ich dachte, mein post war nötig in den ersten Platz.
Wenn Sie testen eine Menge von JSON senden/Antworten, die gegen eine RESTful-Schnittstelle, können Sie prüfen wollen, die Briefträger plug-in für Chrome (die können Sie manuell definieren, die web-service-tests) und seinen Knoten.js-basierte Newman command-line-Begleiter (das können Sie automatisieren tests gegen den "Sammlungen" der Briefträger tests.) Sowohl frei und offen!
HTTPie ist eine Empfehlenswerte alternative zu
curl
denn Sie kann nurEs spricht JSON (default) und behandelt sowohl die Einstellung der erforderlichen header-sowohl für Sie als auch Codierung von Daten als gültiges JSON. Es gibt auch:
für den Kopf, und
für die query-string-Parameter. Wenn Sie eine große Menge von Daten haben, können Sie auch Lesen aus einer Datei zu haben, es werden JSON-kodiert:
Dies funktionierte gut für mich, zusätzlich mit BASIC-Authentifizierung:
Natürlich sollten Sie niemals verwenden Sie die Standardauthentifizierung ohne SSL und einem Zertifikat überprüft.
Lief ich in diese heute nochmal mit Cygwin ' s cURL 7.49.1 für Windows... Und bei der Verwendung von
--data
oder--data-binary
mit einem JSON-argument, cURL verwirrt und würde interpretieren die{}
im JSON als eine URL-Vorlage. Hinzufügen eines-g
argument zu deaktivieren cURL Platzhaltern behoben.Siehe auch Die Angabe einer URL mit Klammern zu curl.
Könnte man auch die JSON-Inhalt in einer Datei und übergeben Sie es an curl mit der
--file-upload
option über den standard-input, wie dieses:Dieser arbeitete für mich:
Bin ich unter den unten angegebenen format zu testen, mit einem web-server.
Angenommen, diese JSON-dict-format:
Vollständiges Beispiel
Können Sie Postboten zu konvertieren CURL
Verwenden Sie die option-d hinzufügen Nutzlast
Zusätzlich:
verwenden -X-POST-POST-Methode zu verwenden
- H 'Accept: application/json' hinzufügen akzeptieren type-header
- H 'Content-Type: application/json' zum hinzufügen von content-type-header
Bitte überprüfen Sie diese tool. Es hilft Ihnen, leicht erstellen curl-snippets.
Können Sie passieren die extension des formats, die Sie wollen, wie Sie am Ende der url.
wie http://localhost:8080/xx/xxx/xxxx.json
oder
http://localhost:8080/xx/xxx/xxxx.xml -
Hinweis: Sie benötigen zum hinzufügen von jackson und jaxb maven-Abhängigkeiten in Ihrer pom.