【发布时间】:2012-06-05 18:12:40
【问题描述】:
问题:有没有办法自动绑定 request.JSON 数据的命令对象?
鉴于我的 grails 控制器中的这个简单的 Command 对象:
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'}
这正是我想要的(向 Oliver Tynes 大声疾呼上述解决方案)。不幸的是,在我创建命令后调用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 邮件列表上的 Ian Roberts,您需要将 @Validateable 注释添加到命令类以使 validate() 工作。谢谢,伊恩!
【问题讨论】: