Uso Ubuntu y he instalado cURL en él. Quiero probar mi aplicación Spring REST con cURL. Escribí mi código POST en el lado de Java. Sin embargo, quiero probarlo con cURL. Estoy tratando de publicar un dato JSON. El ejemplo de los datos es así:
{"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}
Yo uso este 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
Me devuelve este error:
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 descripción del error es la siguiente
El servidor rechazó esta solicitud porque la entidad solicitada está en un formato no admitido por el recurso solicitado para el método solicitado ().
Registro de Tomcat: "POST /ui/webapp/conf/clear HTTP/1.1" 415 1051
¿Cuál es el formato correcto del comando cURL?
Este es mi código PUT
del lado de Java (he probado GET y DELETE y funcionan):
@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;
}
Necesita establecer su content-type a application/json. Pero -d
envía el Content-Type application/x-www-form-urlencoded
, que no es aceptado por Spring.
Mirando la página curl man page, creo que puedes usar -H
:
-H "Content-Type: application/json"
Ejemplo completo:
curl --header "Content-Type: application/json" \
--request POST \
--data '{"username":"xyz","password":"xyz"}' \
http://localhost:3000/api/login
(-H
es la abreviatura de --header
, -d
de --data
)
Tenga en cuenta que -request POST
es opcional si utiliza -d
, ya que la bandera -d
implica una solicitud POST.
En Windows, las cosas son ligeramente diferentes. Vea el hilo de comentarios.