Grails:如何以编程方式将命令对象数据绑定到服务中的域对象?

时间:2015-05-07 20:07:07

标签: grails data-binding gorm

我有一个命令对象,我想将其转换为域对象。

但是,我想将命令对象转换为的对象可能是两个域类之一(它们都是派生类),我需要在服务中进行(基于其他数据,我决定应该绑定哪种类型的对象)。这是可能的,这是最好的方法吗? bindData()仅存在于控制器中。

我是否只需手动将命令对象参数映射到适当的域对象属性?或者有更快/更好的方式吗?

1 个答案:

答案 0 :(得分:6)

如果参数具有相同的名称,则可以使用this question复制值。快速摘要如下:

使用Grails API

您可以通过访问班级中的properties字段来循环查看班级中的属性。

object.properties.each { property -> 
    // Do something
}

然后,您可以检查该属性是否存在于另一个对象中。

if(otherObject.hasProperty(property) && !(key in ['class', 'metaClass']))

然后你可以将它从一个对象复制到另一个对象。

使用Commons

Spring有一个非常好的实用工具类BeanUtils,它提供了一个通用的复制方法,这意味着你可以做一个简单的oneliner。

BeanUtils.copyProperties(object, otherObject);

这会将值复制到名称相同的位置。您可以查看文档here

,否则..

如果它们之间没有映射,那么您会因为引擎不知道如何比较它们而陷入困境,因此您需要手动执行此操作。