2011-06-14 88 views
7

如何獲得我域對象之一的用戶定義屬性的鍵/值的映射?Grails/Groovy - 域對象 - 其屬性的映射

問題是,如果我這樣做我自己,我讓我的屬性加類,元類的限制,封鎖,等等

我認爲Grails能夠在一定程度上做到這一點很容易,因爲它是做腳手架代碼是否正確?我怎麼能自己做這個?

+3

這是你在追求什麼? http://stackoverflow.com/questions/4555150/gorm-persistent-properties – 2011-06-14 12:30:18

+0

這正是我要建議的。顯然,你必須小心瞬態屬性。 – 2011-06-14 20:37:22

回答

8

試試這個

class Person{ 
    String name 
    String address 
} 

def filtered = ['class', 'active', 'metaClass'] 

def alex = new Person(name:'alex', address:'my home') 

def props = alex.properties.collect{it}.findAll{!filtered.contains(it.key)} 

props.each{ 
    println it 
} 

如果使用alex.metaClass.surname = 'such'它也適用。此屬性將顯示在每個循環

+0

這適用於普通的groovy類,但對grails域對象並不那麼簡潔,因爲grails域對象有額外的魔術纏繞在它們周圍,也會被打印。 – krock 2016-04-08 01:21:13

3

這是一個老問題,但我只是碰到這種要求跑,發現another solution是值得在這裏回答爲別人誰遇到這個線程。我已經把基於該線程的例子:

樣品豆

class SampleBean { 

    long id 
    private String firstName 
    String lastName 
    def email 

    Map asMap() { 
     this.class.declaredFields.findAll { !it.synthetic }.collectEntries { 
      [ (it.name):this."$it.name" ] 
     } 
    } 
} 

測試類

class Test { 

    static main(args) { 
     // test bean properties 
     SampleBean sb = new SampleBean(1,'john','doe','[email protected]') 

     println sb.asMap() 
    } 

} 

SampleBean我把各種領域,以表明它的工作原理,這是println的輸出:

[id:1, firstName:john, lastName:doe, email:[email protected]] 
+0

這適用於普通的groovy類,但對於grails域對象並不那麼整潔,因爲grails域對象有額外的魔術纏繞在它們周圍,也會被打印出來。 – krock 2016-04-08 01:21:01