2009-06-24 3 views
12

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

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

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

+0

Вы можете использовать ToStringStyle, это то, predifined стили DEFAULT_STYLE: стиль ToString по умолчанию. MULTI_LINE_STYLE: многострочный стиль toString. NO_FIELD_NAMES_STYLE: имена полей noString не указаны. SHORT_PREFIX_STYLE: короткий префикс toString style. SIMPLE_STYLE: простой стиль toString. Посмотрите, может ли любой из них решить вашу цель. –

ответ

9

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

+0

да. он дает строковое представление моего POJO. но, я хочу, чтобы строковый формат был в другом стиле. Например, вместо [email protected] [name = foo, desc = bar], я хочу, чтобы строка была «[name = foo; desc = bar;]» – Veera

+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) –

+0

Хмм, ссылка выше не копировалась правильно. Существует версия, которая берет объект и ToStringStyle, который должен позволить вам настроить вывод. –

3

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

+0

есть. Я думаю, мне придется принять такой подход. – Veera

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

     } 
    } 
}