2009-06-24 82 views
12

我有一个获取POJO的方法,因为它的参数。现在我想以编程方式获取POJO的所有属性(因为我的代码在运行时可能不知道它中的所有属性),并且还需要获取这些属性的值。最后,我将形成POJO的字符串表示形式。如何使用BeanUtils introspection获取Java对象的所有属性的列表?

我可以使用ToStringBuilder,但我想建立我的输出字符串在特定于我的要求特定的格式。

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

+0

您可以使用ToStringStyle,是具有predifined风格 DEFAULT_STYLE:默认的toString风格。 MULTI_LINE_STYLE:多行toString样式。 NO_FIELD_NAMES_STYLE:无字段名称toString样式。 SHORT_PREFIX_STYLE:短前缀toString风格。 SIMPLE_STYLE:简单的toString样式。 看看有没有这些可以解决你的目的 – 2009-06-24 13:38:54

回答

9

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

+0

是的。它给了我POJO的字符串表示。但是,我希望字符串格式具有不同的风格。例如,我不希望[email protected] [name = foo,desc = bar],而是希望字符串是“[name = foo; desc = bar;]” – Veera 2009-06-24 13:40:55

+0

也许这个版本:http:// commons.apache.org/lang/api-release/org/apache/commons/lang/builder/ReflectionToStringBuilder.html#toString(java.lang.Object,%20org.apache.commons.lang.builder.ToStringStyle) – 2009-06-24 15:47:19

3

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

15

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

我发现使用这个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(); 
      } 

     } 
    } 
}