如何使用BeanUtils内省获取Java对象的所有属性列表?

时间:2022-10-30 00:18:31

I have method which gets a POJO as it's parameter. Now I want to programmatically get all the attributes of the POJO (because my code may not know what are all the attributes in it at run time) and need to get the values for the attributes also. Finally I'll form a string representation of the POJO.

我有一个获取POJO作为参数的方法。现在我想以编程方式获取POJO的所有属性(因为我的代码可能不知道运行时它的所有属性是什么),并且还需要获取属性的值。最后,我将形成POJO的字符串表示。

I could use ToStringBuilder, but I want build my output string in certain format specific to my requirement.

我可以使用ToStringBuilder,但我希望以特定于我的要求的特定格式构建输出字符串。

Is it possible to do so in Beanutils !? If yes, any pointers to the method name? If no, should I write my own reflection code?

是否有可能在Beanutils中这样做?如果是,任何指向方法名称的指针?如果不是,我应该编写自己的反射代码吗?

3 个解决方案

#1


Have you tried ReflectionToStringBuilder? It looks like is should do what you describe.

你试过ReflectionToStringBuilder吗?它看起来应该做你所描述的。

#2


I know this is a year old question, but I think it can be useful for others.

我知道这是一个有问题的问题,但我认为这对其他人有用。

I have found a partial solution using this LOC

我找到了使用这个LOC的部分解决方案

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

Here is a working example:

这是一个工作示例:

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

        }
    }
}

#3


get all properties/variables ( just the name ) using reflection. Now use getProperty method to get the value of that variable

使用反射获取所有属性/变量(只是名称)。现在使用getProperty方法获取该变量的值

#1


Have you tried ReflectionToStringBuilder? It looks like is should do what you describe.

你试过ReflectionToStringBuilder吗?它看起来应该做你所描述的。

#2


I know this is a year old question, but I think it can be useful for others.

我知道这是一个有问题的问题,但我认为这对其他人有用。

I have found a partial solution using this LOC

我找到了使用这个LOC的部分解决方案

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

Here is a working example:

这是一个工作示例:

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

        }
    }
}

#3


get all properties/variables ( just the name ) using reflection. Now use getProperty method to get the value of that variable

使用反射获取所有属性/变量(只是名称)。现在使用getProperty方法获取该变量的值