2011-06-14 23 views
7

¿Cómo puedo obtener un mapa de las claves/valores de solo las propiedades definidas por el usuario en uno de mis objetos de dominio?Grails/Groovy - Objeto de dominio - Mapa de sus propiedades

El problema es que si hago esto por mí mismo, consigo mis propiedades, además de la clase, MetaClass, restricciones, cierres, etc ...

Asumo Griales pueden hacer esto con bastante facilidad porque se hace en un cierto nivel en el andamio de código ¿verdad? ¿Cómo puedo hacer esto yo mismo?

+3

¿Es esto lo que buscas? http://stackoverflow.com/questions/4555150/gorm-persistent-properties –

+0

Eso es exactamente lo que iba a sugerir. Tienes que tener cuidado con las propiedades transitorias, obviamente. –

Respuesta

8

probar este

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 
} 

También funciona si se utiliza alex.metaClass.surname = 'such'. Esta propiedad se mostrará en cada bucle

+0

Esto funciona para las clases groovy normales, pero no es tan limpio para los objetos de dominio Grails ya que los objetos de dominio Grails tienen magia adicional envuelta alrededor de ellos que también se imprimirán. – krock

3

Esta es una vieja pregunta, pero acabo de encontrar este requisito y encontré another solution que vale la pena responder aquí para otros que se encuentran con este hilo. He reunido un ejemplo basado en ese hilo:

bean de ejemplo

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" ] 
     } 
    } 
} 

clase Test

class Test { 

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

     println sb.asMap() 
    } 

} 

El SampleBean pongo una variedad de campos para mostrar que funciona , este es el resultado de la impresión:

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

Esto funciona para las clases groovy normales, pero no es tan limpio para los objetos de dominio Grails ya que los objetos de dominio Grails tienen magia adicional envuelta alrededor de ellos que se imprimirán también. – krock

Cuestiones relacionadas