J'utilise Ubuntu et j'ai installé [cURL][1] dessus. Je veux tester mon application Spring REST avec cURL. J'ai écrit mon code POST du côté de Java. Cependant, je veux le tester avec cURL. J'essaie de poster une donnée JSON. L'exemple de données est le suivant :
{"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}
J'utilise cette commande :
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
Elle renvoie cette erreur :
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 description de l'erreur est la suivante :
Le serveur a refusé cette requête car l'entité demandée est dans un format non supporté par la ressource demandée pour la méthode demandée ().
Journal de Tomcat : "POST /ui/webapp/conf/clear HTTP/1.1" ; 415 1051
Quel est le bon format de la commande cURL ?
Voici mon code PUT
côté Java (j'ai testé GET et DELETE et ils fonctionnent) :
@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;
}
Vous devez définir votre content-type à application/json. Mais [-d
][2] envoie le Content-Type application/x-www-form-urlencoded
, qui n'est pas accepté du côté de Spring.
En regardant la [curl man page][1], je pense que vous pouvez utiliser [-H
][3] :
-H "Content-Type: application/json"
Exemple complet :
curl --header "Content-Type: application/json" \
--request POST \
--data '{"username":"xyz","password":"xyz"}' \
http://localhost:3000/api/login
(-H
est l'abréviation de --header
, -d
pour --data
)
Notez que -request POST
est optionnel si vous utilisez -d
, car le flag -d
implique une requête POST.
Sous Windows, les choses sont légèrement différentes. Voir le fil de commentaires.
[1] : https://curl.haxx.se/docs/manpage.html [2] : https://curl.haxx.se/docs/manpage.html#-d [3] : https://curl.haxx.se/docs/manpage.html#-H