¿Cómo obtener la lista de todos los atributos de un objeto Java utilizando la introspección BeanUtils?

StackOverflow https://stackoverflow.com/questions/1038308

Pregunta

Tengo un método que obtiene un POJO como parámetro. Ahora quiero obtener programáticamente todos los atributos del POJO (porque mi código puede no saber cuáles son todos los atributos en él en tiempo de ejecución) y también necesito obtener los valores para los atributos. Finalmente formaré una representación de cadena del POJO.

Podría usar ToStringBuilder , pero quiero construir mi cadena de salida en cierto formato específico para mi requisito.

¿Es posible hacerlo en Beanutils!? En caso afirmativo, ¿algún puntero al nombre del método? Si no, ¿debo escribir mi propio código de reflexión?

¿Fue útil?

Solución

¿Has probado ReflectionToStringBuilder ? Parece que debería hacer lo que usted describe.

Otros consejos

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

He encontrado una solución parcial usando este LOC

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

Aquí hay un ejemplo de trabajo:

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();
            }

        }
    }
}

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top