receive json rest spring-mvc curl

receive - spring rest api post json



¿Cómo POSTAR datos JSON con Curl desde Terminal/Línea de comando para probar Spring REST? (20)

Yo 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 un dato JSON. Un ejemplo de 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

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 de la 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

¿Alguna idea sobre el formato correcto del comando Curl?

EDITAR:

Este es mi código PUT 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; }


Como ejemplo, cree un archivo JSON, params.json, y agregue este contenido:

[ { "environment": "Devel", "description": "Machine for test, please do not delete!" } ]

A continuación, ejecute este comando:

curl -v -H "Content-Type: application/json" -X POST --data @params.json -u your_username:your_password http://localhost:8000/env/add_server


Cree el archivo JSON "MyData.json" y agregue contenido:

[ { "Key_one": "Value_one", "Key_two": "Value_two", "Key_three": "Value_three" } ]

Después de esto, necesitas ejecutar el siguiente comando:

curl -v -H "Content-Type: application/json" -X POST --data @MyData.json -u USERNAME:PASSWORD http://localhost:8000/env/add_server


Es posible que le resulte útil resty: https://github.com/micha/resty

Es un CURL redondo envolvente que simplifica las solicitudes REST de la línea de comandos. Lo apunta a su punto final de API y le da los comandos PUT y POST. (Ejemplos adaptados de la página de inicio)

$ resty http://127.0.0.1:8080/data #Sets up resty to point at your endpoing $ GET /blogs.json #Gets http://127.0.0.1:8080/data/blogs.json #Put JSON $ PUT /blogs/2.json ''{"id" : 2, "title" : "updated post", "body" : "This is the new."}'' # POST JSON from a file $ POST /blogs/5.json < /tmp/blog.json

Además, a menudo 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 predeterminadas de RESTY


Esto funcionó bien para mí, además de usar la autenticación BASIC:

curl -v --proxy '''' --basic -u Administrator:password -X POST -H "Content-Type: application/json" --data-binary ''{"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://httpbin.org/post

Por supuesto, nunca debe usar la autenticación BÁSICA sin SSL y un certificado verificado.

Me encontré con esto nuevamente hoy, usando el cURL 7.49.1 de Cygwin para Windows ... Y cuando --data o --data-binary con un argumento JSON, cURL se confundió e interpretaría el {} en el JSON como una URL modelo. La adición de un argumento -g para desactivar el CURL globbing solucionó eso.

Consulte también Pasar una URL con corchetes para curl .


Esto funcionó bien para mí.

curl -X POST --data @json_out.txt http://localhost:8080/

Dónde,

-X Significa el verbo http.

--data significa los datos que desea enviar.


Esto funcionó para mí:

curl -H "Content-Type: application/json" -X POST -d @./my_json_body.txt http://192.168.1.1/json


Estoy utilizando el siguiente formato para probar con un servidor web.

use -F ''json data''

Asumamos este formato JSON dict:

{ ''comment'': { ''who'':''some_one'', ''desc'' : ''get it'' } }

Ejemplo completo

curl -XPOST your_address/api -F comment=''{"who":"some_one", "desc":"get it"}''


Funcionó para mí usando:

curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d ''{"id":100}'' http://localhost/api/postJsonReader.do

Fue felizmente asignado al controlador Spring:

@RequestMapping(value = "/postJsonReader", method = RequestMethod.POST) public @ResponseBody String processPostJsonData(@RequestBody IdOnly idOnly) throws Exception { logger.debug("JsonReaderController hit! Reading JSON data!"+idOnly.getId()); return "JSON Received"; }

IdOnly es un simple POJO con una propiedad de identificación.


Intente poner sus datos en un archivo, digamos body.json y luego use

curl -H "Content-Type: application/json" --data @body.json http://localhost:8080/ui/webapp/conf


Me acabo de encontrar con el mismo problema. Podría resolverlo especificando

-H "Content-Type: application/json; charset=UTF-8"


Necesitas establecer tu tipo de contenido en application / json. Pero -d envía la application/x-www-form-urlencoded Content-Type application/x-www-form-urlencoded , que no se acepta en el lado de Spring.

Mirando la página de manual de curl , 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 para --data )

Tenga en cuenta que -request POST es opcional si usa -d , ya que la -d implica una solicitud POST.

En Windows, las cosas son ligeramente diferentes. Ver el hilo de comentarios.


Para Windows, tener una comilla simple para el valor -d no funcionó para mí, pero funcionó después de cambiar a comillas dobles. También necesitaba escapar de comillas dobles entre llaves.

Es decir, lo siguiente no funcionó:

curl -i -X POST -H "Content-Type: application/json" -d ''{"key":"val"}'' http://localhost:8080/appname/path

Pero lo siguiente funcionó:

curl -i -X POST -H "Content-Type: application/json" -d "{/"key/":/"val/"}" http://localhost:8080/appname/path


Para datos json

curl -H "Content-Type: application/json" -X POST -d ''{"params1":"value1","param2":"value2"}'' http://localhost:8080/api

Si quieres publicar algún archivo.

curl -X POST -F "data=@/Users/vishvajitpathak/Desktop/screen_1.png" http://localhost:8080/upload --insecure

En caso de que no quieras meterte con https y http:

O simplemente,

curl -X POST -F "data=@/Users/vishvajitpathak/Desktop/screen_1.png" http://localhost:8080/upload



Puede usar Postman con su GUI intuitiva para ensamblar su comando cURL .

  1. Instalar e iniciar cartero
  2. Escriba su URL, cuerpo del mensaje, encabezados de solicitud, etc. pp.
  3. Haga clic en Code
  4. Seleccione cURL de la lista desplegable
  5. Copia y pega tu comando cURL

Nota: hay varias opciones para la generación automatizada de solicitudes en la lista desplegable, por lo que pensé que mi publicación era necesaria en primer lugar.


Si está probando una gran cantidad de envíos / respuestas JSON contra una interfaz REST, es posible que desee revisar el complemento Postman para Chrome (que le permite definir manualmente las pruebas de servicio web) y su comando Newman basado en Node.js -line companion (que le permite automatizar pruebas contra "colecciones" de pruebas de Postman). ¡Tanto gratis como abierto!


Un poco tarde para la fiesta, pero no veo esto publicado, así que aquí va, también puede poner a su json en un archivo y pasarlo a curl mediante la opción de carga de archivos a través de una entrada estándar, como esta:

echo ''my.awesome.json.function({"do" : "whatever"})'' | curl -X POST "http://url" -T -


Usando CURL Windows, intente esto:

curl -X POST -H "Content-Type:application/json" -d "{/"firstName/": /"blablabla/",/"lastName/": /"dummy/",/"id/": /"123456/"}" http-host/_ah/api/employeeendpoint/v1/employee


Yo uso JSON en mi aplicación y es tan simple como:

curl -X POST -H "Content-Type:application/json" -d ''{"params1":"value1","params2":"value2"} hostname:port/api

Pero si tiene una gran cantidad de parámetros, siempre prefiere usar un archivo con el cuerpo de solicitud JSON como se muestra a continuación:

curl -X POST -H "Content-Type:application/json" -F "data=@/users/suchi/dekstop/JSON_request.txt" hostname:port/api


HTTPie es una alternativa recomendada para curl porque puede hacer solo

$ http POST http://example.com/some/endpoint name=value name1=value1

Habla JSON de forma predeterminada y administrará tanto la configuración del encabezado necesario como la codificación de datos como JSON válido. También hay:

Some-Header:value

para los encabezados, y

name==value

para los parámetros de cadena de consulta. Si tiene una gran cantidad de datos, también puede leerlo desde un archivo si está codificado en JSON:

[email protected]