问题:有没有办法用 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 邮件列表上更新
Per Ian Roberts,您需要将@Validateable
注释添加到命令类才能开始validate()
工作。谢谢,伊恩!