2009-06-24 30 views
12

Tengo el método que obtiene un POJO como su parámetro. Ahora quiero obtener de forma programática todos los atributos del POJO (porque mi código puede no saber cuáles son todos los atributos en el tiempo de ejecución) y también necesito obtener los valores para los atributos. Finalmente formaré una representación de cadena del POJO.¿Cómo obtener la lista de todos los atributos de un objeto Java utilizando la introspección de BeanUtils?

Podría usar ToStringBuilder, pero quiero construir mi cadena de salida en un formato específico para mis requisitos.

¿Es posible hacerlo en Beanutils? En caso afirmativo, ¿algún indicador del nombre del método? Si no, ¿debería escribir mi propio código de reflexión?

+0

Puede utilizar ToStringStyle, que está teniendo predifined DEFAULT_STYLE: El estilo toString defecto. MULTI_LINE_STYLE: el estilo multilinea toString. NO_FIELD_NAMES_STYLE: los nombres de campo no al estilo de cadena. SHORT_PREFIX_STYLE: el prefijo corto al estilo de cadena. SIMPLE_STYLE: el estilo simple toString. Vea si alguno de estos puede resolver su propósito –

Respuesta

9

¿Has probado ReflectionToStringBuilder? Parece que debe hacer lo que describes.

+0

sí. me da la representación de cuerdas de mi POJO. pero, quiero que el formato de la secuencia sea de estilo diferente. Por ejemplo, en lugar de tener [email protected] [name = foo, desc = bar], quiero que la cadena sea "[name = foo; desc = bar;]" – Veera

+0

Quizás esta versión: http: // commons.apache.org/lang/api-release/org/apache/commons/lang/builder/ReflectionToStringBuilder.html#toString(java.lang.Object,%20org.apache.commons.lang.builder.ToStringStyle) –

+0

Hmm, el enlace de arriba no se copió correctamente. Hay una versión que toma el objeto y un ToStringStyle que debería permitirle personalizar el resultado. –

3

obtener todas las propiedades/variables (solo el nombre) utilizando la reflexión. Ahora use el método getProperty para obtener el valor de esa variable

+0

sí. Creo que tendré que tomar este enfoque. – Veera

15

Sé que esta es una pregunta de hace un año, pero creo que puede ser útil para otros.

Me han encontrado una solución parcial que utiliza este LOC

Field [] attributes = MyBeanClass.class.getDeclaredFields(); 

Aquí está un ejemplo de trabajo:

estilos
import java.lang.reflect.Field; 

import org.apache.commons.beanutils.PropertyUtils; 

public class ObjectWithSomeProperties { 

    private String firstProperty; 

    private String secondProperty; 


    public String getFirstProperty() { 
     return firstProperty; 
    } 

    public void setFirstProperty(String firstProperty) { 
     this.firstProperty = firstProperty; 
    } 

    public String getSecondProperty() { 
     return secondProperty; 
    } 

    public void setSecondProperty(String secondProperty) { 
     this.secondProperty = secondProperty; 
    } 

    public static void main(String[] args) { 

     ObjectWithSomeProperties object = new ObjectWithSomeProperties(); 

     // Load all fields in the class (private included) 
     Field [] attributes = object.getClass().getDeclaredFields(); 

     for (Field field : attributes) { 
      // Dynamically read Attribute Name 
      System.out.println("ATTRIBUTE NAME: " + field.getName()); 

      try { 
       // Dynamically set Attribute Value 
       PropertyUtils.setSimpleProperty(object, field.getName(), "A VALUE"); 
       System.out.println("ATTRIBUTE VALUE: " + PropertyUtils.getSimpleProperty(object, field.getName())); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

     } 
    } 
} 
Cuestiones relacionadas