Groovy、grails:关于无关属性和命令对象/数据绑定的高级问题



简单问几个问题:

1)如果我有一个类a,只有一个字段x,正在构造它

def A = new A(x:someVal, y:someVal) 

完全好?

2)相关的,下面是一个好方法来复制一个命令对象的相关部分到一个域对象吗?

 def domainObject = new DomainObject(commandObject.properties).  

命令对象有额外的属性。或者应该这样做:

def domainObject = new DomainObject()
domainObject.properties['prop1', 'prop2', ...] = commandObject.properties

谢谢

对于第一个问题,区分普通groovy对象和grails域对象是很重要的。Groovy对象抛出一个MissingPropertyException。Grails域对象将静默地忽略额外的属性。

关于第二个问题,使用命令对象初始化grails域对象是一种常见的模式,通常是可以的。参数可能更危险一些。恶意用户可以将任何内容放入params中,因此最好显式地说明要分配的属性。否则,像时间戳和用户,甚至像注入的spring bean这样的非映射列都可能受到影响。

最新更新