Domanda: esiste un modo per eseguire l'associazione di oggetti comando automatico con request.JSON data?Oggetto comando Grails: come caricare request.JSON in esso?
Dato questo semplice oggetto Command nel mio controller graal:
class ProfileCommand{
int id
String companyName
static constraints = {
companyName blank: false
id nullable: false
}
@Override
public String toString() {
return "ProfileCommand{id=$id, companyName='$companyName'}";
}
}
e il mio metodo di controllo della firma:
def update(ProfileCommand command) {...}
Come posso ottenere request.JSON
dati nel mio oggetto di comando?
Finora, l'unico modo sono stato in grado di farlo è quello di creare l'oggetto di comando manualmente all'interno del metodo update()
, passando request.JSON come argomento del costruttore:
def command = new ProfileCommand(request.JSON)
log.debug "Command object contents: $command"
Quanto sopra di debug comando produce:
Command object contents: ProfileCommand{id=1, companyName='Blub Muckers'}
che è esattamente ciò che voglio (Un grande grido-out per Oliver Tynes per la soluzione di cui sopra). Purtroppo, chiamando command.validate()
dopo creo il comando produce la seguente eccezione:
Class org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException
Message Tag [validate] is missing required attribute [form]
sto usando v2.0.3, URI hanno prodotto la stessa eccezione w/v2.0.4.
UPDATE Per Ian Roberts sulle graal mailing list, è necessario aggiungere il @Validateable
annotazioni alla classe comando per ottenere validate()
al lavoro. Grazie, Ian!
Questo funzionerebbe. La contrassegnerò come la risposta a meno che nessun altro abbia un altro suggerimento. Grazie, Aquatoad! –
Felice di aiutare. Rimuoverò anche il bit corretto dall'annotazione @Validateable. – Aquatoad
sostituisce params.k = v con params [k] = v - altrimenti non funzionerà ... –