tutorial example json grails post request put

json - example - spring security oauth2



Problemas con un pedido POST/PUT Json RESTful Grails (1)

Así es como debe hacerse en los controladores:

def index() { //JSON Object is not bound to params it is bound to request in POST/PUT def jsonObj = request.JSON //You can also use JSON.parse() to get a JSON object if the request payload has JSON as string //def jsonObj = JSON.parse(request) //You will not be able to save the inner JSONArrays if you // directly bind the jsonObj to the domain. in order to save //convert them to the proper domain objects otherwise you would get validation errors for parametros def catalogParams = [] as Set jsonObj.parametros.each{ catalogParams << new CatalogParams(it) } //Set the domain back to the jsonObj jsonObj.parametros = catalogParams //Bind to catalog def catalog = new Catalog(jsonObj) //Synonymous to new Catalog(params) but here you cannot use params. //Save if (!catalog.save(flush: true)){ catalog.errors.each { println it } } render catalog } //Domain Classes:- class CatalogParams { String tipoParametro String json static constraints = { tipoParametro(nullable:true) json(nullable:true) } } class Catalog { String nombre String descripcion String url Set<CatalogParams> parametros = [] static hasMany = [parametros: CatalogParams] int numeroParametros = parametros.size() }

Cliente REST:

¿Cómo está probando el REST WS? ¿Debería tener un cliente REST para probar el servicio? O puede usar la extensión de la consola REST en Chrome para probar su servicio. También puede usar un plugin de grails rest-client-builder para probar su servicio. En términos básicos, si no quiere ninguna implementación de cliente, entonces al menos una secuencia de comandos para probar su servicio. HttpBuilder será útil en este caso: Se requiere algo como esto para probar su servicio

import groovyx.net.http.HTTPBuilder def http = new HTTPBuilder(''http://yourdomain.com/catalog/'') http.request(POST, JSON) { requestContentType = ContentType.APPLICATION_JSON // coreesponding to application/json body = ["descripcion": "bla", "nombre" : "lalala", "numeroParametros":3, "parametros":[{ "tipoParametro":"string", "json":"bla"}],"url":"google.com"] response.success = { resp -> assert resp.statusLine.statusCode == 200 } }

Hola, tengo un código de descanso de Grails. Perfecciono una solicitud de obtención y eliminación de Json. Mi problema es: quiero hacer una solicitud de envío o publicación con json, pero si utilizo un programa para hacerlo, tiene un error y no puedo hacerlo. Aquí mi código: una clase:

package catalogo.json class Catalogo { String nombre String descripcion String url Set <Parametros>parametros =[] static hasMany = [parametros:Parametros] int numeroParametros = parametros.size() }

Y otra clase:

package catalogo.json class Parametros { String tipoParametro String json static constraints = { tipoParametro(nullable:true) json(nullable:true) } }

No sé cómo poner mi json en la solicitud. Aquí está el error cuando lo puse.

EJEMPLO:
PUSE la solicitud POST. body application/json (o text/json es el mismo error) Charset-utf-8

{"descripcion": "bla", "nombre" : "lalala", "numeroParametros":3, "parametros":[{ "tipoParametro":"string", "json":"bla"}],"url":"http://www.google.com"}

Y aquí el error:

Could not create new Catalogo due to errors: grails.validation.ValidationErrors: 3 errors Field error in object ''catalogo.json.Catalogo'' on field ''descripcion'': rejected value [null]; codes [catalogo.json.Catalogo.descripcion.nullable.error.catalogo.json.Catalogo.descripcion,catalogo.json.Catalogo.descripcion.nullable.error.descripcion,catalogo.json.Catalogo.descripcion.nullable.error.java.lang.String,catalogo.json.Catalogo.descripcion.nullable.error,catalogo.descripcion.nullable.error.catalogo.json.Catalogo.descripcion,catalogo.descripcion.nullable.error.descripcion,catalogo.descripcion.nullable.error.java.lang.String,catalogo.descripcion.nullable.error,catalogo.json.Catalogo.descripcion.nullable.catalogo.json.Catalogo.descripcion,catalogo.json.Catalogo.descripcion.nullable.descripcion,catalogo.json.Catalogo.descripcion.nullable.java.lang.String,catalogo.json.Catalogo.descripcion.nullable,catalogo.descripcion.nullable.catalogo.json.Catalogo.descripcion,catalogo.descripcion.nullable.descripcion,catalogo.descripcion.nullable.java.lang.String,catalogo.descripcion.nullable,nullable.catalogo.json.Catalogo.descripcion,nullable.descripcion,nullable.java.lang.String,nullable]; arguments [descripcion,class catalogo.json.Catalogo]; default message [La propiedad [{0}] de la clase [{1}] no puede ser nulo] Field error in object ''catalogo.json.Catalogo'' on field ''nombre'': rejected value [null]; codes [catalogo.json.Catalogo.nombre.nullable.error.catalogo.json.Catalogo.nombre,catalogo.json.Catalogo.nombre.nullable.error.nombre,catalogo.json.Catalogo.nombre.nullable.error.java.lang.String,catalogo.json.Catalogo.nombre.nullable.error,catalogo.nombre.nullable.error.catalogo.json.Catalogo.nombre,catalogo.nombre.nullable.error.nombre,catalogo.nombre.nullable.error.java.lang.String,catalogo.nombre.nullable.error,catalogo.json.Catalogo.nombre.nullable.catalogo.json.Catalogo.nombre,catalogo.json.Catalogo.nombre.nullable.nombre,catalogo.json.Catalogo.nombre.nullable.java.lang.String,catalogo.json.Catalogo.nombre.nullable,catalogo.nombre.nullable.catalogo.json.Catalogo.nombre,catalogo.nombre.nullable.nombre,catalogo.nombre.nullable.java.lang.String,catalogo.nombre.nullable,nullable.catalogo.json.Catalogo.nombre,nullable.nombre,nullable.java.lang.String,nullable]; arguments [nombre,class catalogo.json.Catalogo]; default message [La propiedad [{0}] de la clase [{1}] no puede ser nulo] Field error in object ''catalogo.json.Catalogo'' on field ''url'': rejected value [null]; codes [catalogo.json.Catalogo.url.nullable.error.catalogo.json.Catalogo.url,catalogo.json.Catalogo.url.nullable.error.url,catalogo.json.Catalogo.url.nullable.error.java.lang.String,catalogo.json.Catalogo.url.nullable.error,catalogo.url.nullable.error.catalogo.json.Catalogo.url,catalogo.url.nullable.error.url,catalogo.url.nullable.error.java.lang.String,catalogo.url.nullable.error,catalogo.json.Catalogo.url.nullable.catalogo.json.Catalogo.url,catalogo.json.Catalogo.url.nullable.url,catalogo.json.Catalogo.url.nullable.java.lang.String,catalogo.json.Catalogo.url.nullable,catalogo.url.nullable.catalogo.json.Catalogo.url,catalogo.url.nullable.url,catalogo.url.nullable.java.lang.String,catalogo.url.nullable,nullable.catalogo.json.Catalogo.url,nullable.url,nullable.java.lang.String,nullable]; arguments [url,class catalogo.json.Catalogo]; default message [La propiedad [{0}] de la clase [{1}] no puede ser nulo]

EDITAR AQUÍ MI CONTROLADOR:

package catalogo.json import grails.converters.JSON class CatalogoController { def index = { switch(request.method){ case "POST": def catalogo = new Catalogo(params.catalogo) if(catalogo.save()){ response.status = 201 // Created render catalogo as JSON } else{ response.status = 500 //Internal Server Error render "Could not create new Airport due to errors:/n ${catalogo.errors}" } break case "GET": if(params.id){render Catalogo.findById(params.id) as JSON} else{render Catalogo.list() as JSON} break case "PUT": def catalogo = Catalogo.findById(params.catalogo.id) catalogo.properties = params.catalogo if(catalogo.save()){ response.status = 200 // OK render catalogo as JSON } else{ response.status = 500 //Internal Server Error render "Could not create new Catalogo due to errors:/n ${catalogo.errors}" } break case "DELETE": if(params.id){ def catalogo = Catalogo.findById(params.id) if(catalogo){ catalogo.delete() render "Successfully Deleted." } else{ response.status = 404 //Not Found render "${params.id} not found." } } else{ response.status = 400 //Bad Request render """DELETE request must include the ID code Example: /rest/catalogo/id """ } break } } def list = { if(!params.max) params.max = 10 def list = Catalogo.list(params) withFormat{ html{ return [catalogoList:list] } json{ render list as JSON } } } }

Gracias