Grails Command Object : How to load request. JSON 进去了吗?

标签 grails grails-controller

问题 : 有没有办法用 request.JSON 数据自动绑定(bind)命令对象?

鉴于我的 grails Controller 中的这个简单的 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'}";
}
}

和我的 Controller 方法签名:
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()去工作。谢谢,伊恩!

最佳答案

我不确定是否有任何配置方式可以进行自动 JSON 参数数据绑定(bind);您可能能够做的一件事是为您的操作编写一个过滤器,该过滤器采用 JSON 请求输入,基本上将 request.JSON 直接重新映射到根参数映射,理论上这应该允许自动数据绑定(bind)发生。

就像是:

class JSONParamMapFilters {
  def filters = {
     before = {
        remapFilter(controller:'yourController', action:'update') {
           request.JSON.each { k,v ->
               params[k] = v
           }
        }
     }
  }
}

然后,您可以通过正则表达式/命名约定将此过滤器扩展到任何适用的 Controller 操作。

关于Grails Command Object : How to load request. JSON 进去了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10834422/

相关文章:

mongodb - 如何从 groovy/grails 查询 mongodb?

tomcat - 无法在 Tomcat : MalformedParameterizedTypeException on 'pluginManager' 中部署 Grails 应用程序

grails - 可搜索的grails插件ClassNotFoundException:org.apache.lucene.analysis.Analyzer $ TokenStreamComponents

grails - Grails集成测试 Controller 不能重复使用?

Grails IntegrationSpec IllegalStateException

grails - Grails 2.4.4。分层域结构:查找

ajax - Grails formRemote:为什么总是重定向?

grails - 如何避免 grails 中的额外参数(GSP 页面到 Controller )

Grails编辑工作异常更新数据库的值分配

grails - 如何强制https