Вопрос: существует ли способ автоматического связывания объекта команды с данными 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 command) {...}
Как я могу получить данные 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, урис создал то же исключение w/v2.0.4.
UPDATE
Для Иана Робертса в списке рассылки Grails вам нужно добавить аннотацию @Validateable
к классу команд, чтобы получить работу validate()
. Спасибо, Ян!