Как получить список всех атрибутов объекта Java, используя самоанализ BeanUtils? - PullRequest
13 голосов
/ 24 июня 2009

У меня есть метод, который получает POJO в качестве параметра. Теперь я хочу программно получить все атрибуты POJO (потому что мой код может не знать, каковы все атрибуты в нем во время выполнения) и мне нужно также получить значения для атрибутов. Наконец, я сформирую строковое представление POJO.

Я мог бы использовать ToStringBuilder , но я хочу построить мою выходную строку в определенном формате, соответствующем моим требованиям.

Возможно ли это сделать в Beanutils!? Если да, есть ли какие-либо указатели на имя метода? Если нет, я должен написать свой собственный код отражения?

Ответы [ 3 ]

16 голосов
/ 19 декабря 2012

Я знаю, что это годичный вопрос, но я думаю, что он может быть полезен другим.

Я нашел частичное решение, используя этот LOC

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

Вот рабочий пример:

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

        }
    }
}
10 голосов
/ 24 июня 2009

Вы пробовали ReflectionToStringBuilder ? Похоже, следует делать то, что вы описываете.

3 голосов
/ 24 июня 2009

получить все свойства / переменные (только имя), используя отражение. Теперь используйте метод getProperty , чтобы получить значение этой переменной

...