title: Problems with a POST/PUT Json RESTful request Grails
body: <p>Hi I have a grails restful code. I do perfect a Json get and delete request.
  My problem is:
  I want to do a Put or post request with json but if I use a program to do that It has an error and I cant do it!
  Here my code:
    One class:</p>
  
  <pre><code>package catalogo.json
  class Catalogo {
     String nombre
     String descripcion
     String url
     Set &lt;Parametros&gt;parametros =[]
     static hasMany = [parametros:Parametros]
     int numeroParametros = parametros.size()
  }
  </code></pre>
  
  <p>And other class:</p>
  
  <pre><code>package catalogo.json
  
  class Parametros {
     String tipoParametro
     String json
     static constraints = {
       tipoParametro(nullable:true)
       json(nullable:true)
     }
  }
  </code></pre>
  
  <p>I don't know how to put my json in the request. Heres the error when I put it.</p>
  
  <p><strong>EXAMPLE:</strong><br>
  I PUT POST request.
      body <code>application/json</code> (or <code>text/json</code> is the same error)  Charset-utf-8</p>
  
  <pre><code>{"descripcion": "bla", "nombre" : "lalala", "numeroParametros":3, "parametros":[{                 
  "tipoParametro":"string", "json":"bla"}],"url":"http://www.google.com"}
  </code></pre>
  
  <p>And here the error:</p>
  
  <pre><code>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]
  </code></pre>
  
  <p>EDIT HERE MY CONTROLLER:</p>
  
  <pre><code>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
      }
    }
  }
  }
  </code></pre>
  
  <p>Thanks</p>