【问题标题】:Grails: how to programatically bind command object data to domain object in service?Grails:如何以编程方式将命令对象数据绑定到服务中的域对象?
【发布时间】:2015-05-07 20:07:06
【问题描述】:

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

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

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

【问题讨论】:

    标签: grails data-binding grails-orm


    【解决方案1】:

    如果参数名称相同,则可以使用this question 将值复制过来。简要总结如下。

    使用 Grails API

    您可以通过访问类中的properties 字段来循环浏览类中的属性。

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

    然后您可以检查该属性是否存在于其他对象中。

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

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

    使用共享资源

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

    BeanUtils.copyProperties(object, otherObject);
    

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

    否则..

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

    【讨论】:

    • 谢谢,这是一个很好的答案。
    猜你喜欢
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 2015-12-12
    • 2018-11-06
    • 1970-01-01
    相关资源
    最近更新 更多