2010-05-03 10 views
5

Ok, ho creato un'app molto semplice in Grails. Ho una classe generata dominio (persona) e il suo controller generato, utilizzando i Grails automatici patibolo:Uscita JSON di una vista in Grails

package contacts 

class PersonController { 

    def scaffold = Person 

} 

Ora mi piacerebbe ottenere una rappresentazione JSON di un oggetto Person.

Devo modificare la vista o il controller? E come?

Grazie.

risposta

9

Aggiungere il seguente al controllore:

def list = { 
    params.max = Math.min(params.max ? params.int('max') : 10, 100) 
    def personList = Person.list(params) 
    withFormat { 
     html { 
      [personInstanceList: personList, personInstanceTotal: Person.count()] 
     } 
     json { 
      render personList as JSON 
     } 
    } 
} 

Questo dovrebbe supportare sia il ponteggio e l'uscita JSON.

È possibile accedere al ponteggio come:

http://localhost:8080/contacts/person/list

È possibile accedere all'elenco persona come JSON con:

http://localhost:8080/contacts/person/list?format=json

Ci sono altri modi per farlo troppo, ma io come farlo in questo modo per lasciare l'impalcatura in giro per i test.

+0

Grande. Grazie per la tua risposta precisa e completa;) – daliz

+0

Un po 'troppo complesso per me: dovresti invece usare 'static responseFormats = [" json "," html "]' nel tuo controller e mantenere il codice generato così com'è (come 'rispondi User.list (params) ... '). Non c'è bisogno di scrivere codice per gestire i formati. La vergogna è che dovremmo essere in grado di usare scaffold AND json senza dover generare alcun codice di controller –