¿Cómo obtener la lista de todos los atributos de un objeto Java utilizando la introspección BeanUtils?
-
10-07-2019 - |
Pregunta
Tengo un método que obtiene un POJO como parámetro. Ahora quiero obtener programáticamente todos los atributos del POJO (porque mi código puede no saber cuáles son todos los atributos en él en tiempo de ejecución) y también necesito obtener los valores para los atributos. Finalmente formaré una representación de cadena del POJO.
Podría usar ToStringBuilder , pero quiero construir mi cadena de salida en cierto formato específico para mi requisito.
¿Es posible hacerlo en Beanutils!? En caso afirmativo, ¿algún puntero al nombre del método? Si no, ¿debo escribir mi propio código de reflexión?
Solución
¿Has probado ReflectionToStringBuilder ? Parece que debería hacer lo que usted describe.
Otros consejos
Sé que esta es una pregunta de hace un año, pero creo que puede ser útil para otros.
He encontrado una solución parcial usando este LOC
Field [] attributes = MyBeanClass.class.getDeclaredFields();
Aquí hay un ejemplo de trabajo:
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();
}
}
}
}
obtenga todas las propiedades / variables (solo el nombre) usando la reflexión. Ahora use método getProperty para obtener el valor de esa variable