Командный объект Grails: как загрузить в него request.JSON?

Вопрос : есть ли способ сделать автоматическую привязку командного объекта к данным request.JSON?

Учитывая этот простой объект Command в моем контроллере Grails:

class ProfileCommand{

int id
String companyName

static constraints = {
    companyName blank: false
    id nullable: false
}

@Override
public String toString() {
    return "ProfileCommand{id=$id, companyName='$companyName'}";
}
}

и сигнатуру метода моего контроллера:

def update(команда ProfileCommand) {...}

Как я могу получить request.JSON данные в мой командный объект?

До сих пор единственный способ сделать это — создать объект команды вручную в методе update(), передав request.JSON в качестве аргумента конструктора:

    def command = new ProfileCommand(request.JSON)

    log.debug "Command object contents: $command"

Приведенная выше команда отладки выдает:

Command object contents: ProfileCommand{id=1, companyName='Blub Muckers'}

Это именно то, что я хочу (большой привет Оливеру Тайнсу за приведенное выше решение). К сожалению, вызов command.validate()после создания команды приводит к следующему исключению:

Class org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException
Message Tag [validate] is missing required attribute [form]

Я использую v2.0.3, uris выдал такое же исключение с v2.0.4.

ОБНОВЛЕНИЕ Согласно Иану Робертсу из списка рассылки Grails, вам нужно добавить аннотацию @Validateableк классу команд, чтобы заставить validate()работать. Спасибо, Ян!

12
задан John Gordon 31 May 2012 в 15:51
поделиться