Altro
Come posso inviare dati JSON con Curl da un terminale/commandline a Test Spring REST?
Uso Ubuntu e ho installato cURL su di esso. Voglio testare la mia applicazione Spring REST con cURL. Ho scritto il mio codice POST sul lato Java. Tuttavia, voglio testarlo con cURL. Sto cercando di inviare un dato JSON. I dati di esempio sono come questo:
{"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}
Uso questo comando:
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
Restituisce questo errore:
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
La descrizione dell'errore è questa:
*Il server ha rifiutato questa richiesta perché l'entità della richiesta è in un formato non supportato dalla risorsa richiesta per il metodo richiesto ().
Log di Tomcat: "POST /ui/webapp/conf/clear HTTP/1.1" 415 1051
Qual è il giusto formato del comando cURL?
Questo è il mio codice PUT
lato Java (ho provato GET e DELETE e funzionano):
@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;
}
2583
3
Devi impostare il tuo content-type su application/json. Ma
-d
invia il Content-Typeapplication/x-www-form-urlencoded
, che non è accettato da Spring.Guardando la curl man page, penso che tu possa usare
-H
:Esempio completo:
(
-H
è l'abbreviazione di--header
,-d
di--data
)Si noti che
-request POST
è opzionale se si usa-d
, poiché il flag-d
implica una richiesta POST.Su Windows, le cose sono leggermente diverse. Vedi il thread dei commenti.
Prova a mettere i tuoi dati in un file, diciamo
body.json
e poi usaHo appena incontrato lo stesso problema. Potrei risolverlo specificando