Вопрос : есть ли способ сделать автоматическую привязку командного объекта к данным 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()
работать. Спасибо, Ян!