spring-mvc api - ¿Cómo POSTAR datos JSON con Curl desde Terminal / Línea de comando para probar Spring REST?




boot receive (17)

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 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;
} 

Esto funcionó para mí:

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

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!


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.


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.


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

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 "[email protected]/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 "[email protected]/Users/vishvajitpathak/Desktop/screen_1.png" http://localhost:8080/upload


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"}'

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 "[email protected]/users/suchi/dekstop/JSON_request.txt" hostname:port/api


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

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

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

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

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 -

var dataArray = [];
var obj = jQuery.parseJSON(response);
  for( key in obj ) 
  dataArray.push([key.toString(), obj [key]]);
};




json rest spring-mvc curl