Groovy:列出动态属性

时间:2013-02-06 01:52:41

标签: mongodb groovy

如果我有一个GORM持久化对象和Mongo中的集合,它引用了更改,我该如何列出这些属性?例如(不是我的实际用例),我有一个名为Toy的类,它有字段名称和价格,然后有人将制造商添加到数据库而不是代码......

class Toy {
  String name
  Double price
}

class SomeController {
  def show() {
    def Toy t
    t = Toy.get(1)
    render t['manufacturer'] 
  }
}

t ['制造商']工作正常。调用加载数据库中的所有属性而不管类的字段定义,但是我(对Groovy来说很新)不知道如何列出这些可订阅的属性以了解是否有更改。

2 个答案:

答案 0 :(得分:0)

查看对象

上的属性字段
t.properties.each { prop, val ->
  println "Property: $prop $val"
}

但请注意,“metaClass”和“class”总是被groovy放在那里。 groovy中常见的一句话是:

foo.properties.each { prop, val ->
    if(["metaClass","class"].find {it == prop}) return
    // else do something with the property or value
}

答案 1 :(得分:0)

我猜你真正想要的是在底层mongo数据库实体中设置的动态属性。

执行以下操作以获取其姓名:

def nativePropertyNames = domainInstance.dbo.keySet()

如果你只想要动态属性,那么就可以了:

def dynamicPropertyNames = domainInstance.dbo.keySet() - "_id" - domainInstance.properties.keySet()