Как получить список всех атрибутов объекта Java, используя самоанализ BeanUtils?
-
10-07-2019 - |
Вопрос
У меня есть метод, который получает POJO в качестве параметра. Теперь я хочу программно получить все атрибуты POJO (потому что мой код может не знать, каковы все атрибуты в нем во время выполнения), и мне нужно также получить значения для атрибутов. Наконец, я сформирую строковое представление POJO.
Я мог бы использовать ToStringBuilder , но я хочу построить мою выходную строку в определенном формате, соответствующем моему требованию. Р>
Возможно ли это сделать в Beanutils!? Если да, есть ли какие-либо указатели на имя метода? Если нет, я должен написать свой собственный код отражения?
Решение
Вы пробовали ReflectionToStringBuilder ? Похоже, должен делать то, что вы описываете.
Другие советы
Я знаю, что это годичный вопрос, но я думаю, что он может быть полезным для других.
Я нашел частичное решение, используя этот 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();
}
}
}
}
получить все свойства / переменные (только имя), используя отражение. Теперь используйте getProperty для получения значения этой переменной