Вопрос: есть ли способ сделать автоматическую привязку объекта команды к данным 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, uris произвел такое же исключение с v2.0.4.
ОБНОВЛЕНИЕ Согласно Иэну Робертсу из списка рассылки Grails, вам нужно добавить аннотацию @Validateable
к классу команд, чтобы заставить validate()
работать. Спасибо, Ян!