Uso Ubuntu e instalé 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 datos JSON. Los datos de ejemplo son 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
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 esta:
El servidor rechazó esta solicitud porque la entidad de solicitud 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 PUT
código lateral 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;
}
json
rest
spring-mvc
curl
http-headers
kamaci
fuente
fuente
Respuestas:
Debe configurar su tipo de contenido en application / json. Pero
-d
envía el tipo de contenidoapplication/x-www-form-urlencoded
, que no se acepta por parte de Spring.Mirando la página del manual de curl , creo que puedes usar
-H
:Ejemplo completo:
(
-H
Es la abreviatura de--header
,-d
por--data
)Tenga en cuenta que
-request POST
es opcional si lo usa-d
, ya que el-d
indicador implica una solicitud POST.En Windows, las cosas son ligeramente diferentes. Ver el hilo de comentarios.
fuente
curl -X POST -H "Content-Type: application/json" -d "{ \"key1\": \"value1\" }" http://localhost:3000/api/method
"{ """key1""": """value1""" }"
. También esta respuesta: stackoverflow.com/questions/18314796/…Intente poner sus datos en un archivo, diga
body.json
y luego usefuente
--data-binary
opción en lugar de--data
. Uno esperaría que el cliente envíe los datos tal cual, pero--data
elimina CR y LF de la entrada.@
carácter antes del nombre del archivo, de lo contrario no funcionará. Acabo de pasar 20 minutos golpeándome la cabeza con esta basura ...Puede encontrar útil resty: https://github.com/micha/resty
Es un envoltorio redondo CURL que simplifica las solicitudes REST de la línea de comandos. Lo apuntas a tu punto final de API y te da comandos PUT y POST. (Ejemplos adaptados de la página de inicio)
Además, a menudo todavía es necesario agregar los encabezados de Tipo de contenido. Sin embargo, puede hacer esto una vez para establecer un valor predeterminado de agregar archivos de configuración por método por sitio: Configuración de las opciones de RESTY predeterminadas
fuente
Para Windows, tener una comilla simple para el
-d
valor no funcionó para mí, pero funcionó después de cambiar a comillas dobles. También necesitaba escapar de las comillas dobles entre llaves.Es decir, lo siguiente no funcionó:
Pero lo siguiente funcionó:
fuente
Funcionó para mí usando:
Fue felizmente mapeado al controlador Spring:
IdOnly
es un POJO simple con una propiedad de identificación.fuente
Como ejemplo, cree un archivo JSON, params.json, y agregue este contenido:
Luego ejecutas este comando:
fuente
Acabo de encontrarme con el mismo problema. Podría resolverlo especificando
fuente
Esto funcionó bien para mí.
Dónde,
-X
Significa el verbo http.--data
Significa los datos que desea enviar.fuente
-X POST
es redundante en este ejemploPuede usar Postman con su GUI intuitiva para ensamblar su
cURL
comando.Code
cURL
de la lista desplegablecURL
comandoNota: Hay varias opciones para la generación automática de solicitudes en la lista desplegable, por lo que pensé que mi publicación era necesaria en primer lugar.
fuente
Usando CURL Windows, intente esto:
fuente
Puedes usar cartero para convertir a CURL
fuente
HTTPie es una alternativa recomendada
curl
porque puedes hacer soloHabla JSON de forma predeterminada y se encargará tanto de configurar el encabezado necesario para usted como de codificar datos como JSON válido. También hay:
para encabezados y
para consultar los parámetros de la cadena. Si tiene una gran cantidad de datos, también puede leerlos desde un archivo si está codificado con JSON:
fuente
Si está probando una gran cantidad de envíos / respuestas JSON en una interfaz RESTful, puede consultar el complemento Postman para Chrome (que le permite definir manualmente las pruebas de servicio web) y su comando Newman basado en Node.js. en línea (que le permite automatizar las pruebas contra "colecciones" de pruebas de Postman). ¡Gratis y abierto!
fuente
Esto funcionó bien para mí, además de usar autenticación BÁSICA:
Por supuesto, nunca debe usar la autenticación BASIC sin SSL y un certificado verificado.
Me encontré con esto nuevamente hoy, usando cURL 7.49.1 de Cygwin para Windows ... Y cuando usé
--data
o--data-binary
con un argumento JSON, cURL se confundió e interpretó{}
el JSON como una plantilla de URL. Agregar un-g
argumento para desactivar el pegado de cURL solucionó eso.Consulte también Pasar una URL con corchetes para rizar .
fuente
También puede poner su contenido JSON en un archivo y pasarlo a curl usando la
--file-upload
opción a través de una entrada estándar, como esta:fuente
Esto funcionó para mí:
fuente
Estoy usando el siguiente formato para probar con un servidor web.
Asumamos este formato de dictado JSON:
Ejemplo completo
fuente
Use la opción -d para agregar carga útil
Adicionalmente:
use -X POST para usar el método POST
use -H 'Aceptar: aplicación / json' para agregar el encabezado de tipo de aceptación
use -H 'Content-Type: application / json' para agregar encabezado de tipo de contenido
fuente
Por favor revise esta herramienta . Le ayuda a crear fácilmente fragmentos de rizo.
fuente
Esto funcionó para mí en Windows10
fuente
Aquí hay otra forma de hacerlo, si tiene que incluir datos dinámicos.
fuente
Lo sé, se ha respondido mucho a esta pregunta, pero quería compartir dónde tuve el problema de:
Mira, hice todo bien, solo una cosa: "@" me perdí antes de la ruta del archivo JSON.
Encontré un documento de referencia relevante en Internet: https://gist.github.com/subfuzion/08c5d85437d5d4f00e58
Espero que pueda ayudar a unos pocos. Gracias
fuente
Si configura el SWAGGER en su aplicación de arranque de primavera e invoca cualquier API desde su aplicación allí, también puede ver esa solicitud CURL.
Creo que esta es la manera fácil de generar las solicitudes a través de CURL.
fuente
Puede pasar la extensión del formato que desee como el final de la url. como http: // localhost: 8080 / xx / xxx / xxxx .json
o
http: // localhost: 8080 / xx / xxx / xxxx .xml
Nota: debe agregar las dependencias jackson y jaxb maven en su pom.
fuente