Comment obtenir la liste de tous les attributs d'un objet Java en utilisant l'introspection BeanUtils?
-
10-07-2019 - |
Question
J'ai une méthode qui obtient un POJO comme paramètre. Maintenant, je souhaite obtenir par programme tous les attributs du POJO (car mon code peut ne pas savoir quels sont tous les attributs qu'il contient au moment de l'exécution) et j'ai également besoin d'obtenir les valeurs pour les attributs. Enfin, je vais former une représentation sous forme de chaîne du POJO.
Je pourrais utiliser ToStringBuilder , mais je veux construire ma chaîne de sortie dans un format spécifique à mon exigence.
Est-il possible de le faire à Beanutils!? Si oui, des pointeurs sur le nom de la méthode? Si non, devrais-je écrire mon propre code de réflexion?
La solution
Avez-vous essayé ReflectionToStringBuilder ? Il semble que vous devriez faire ce que vous décrivez.
Autres conseils
Je sais que cette question remonte à un an, mais je pense que cela peut être utile pour les autres.
J'ai trouvé une solution partielle en utilisant ce LOC
Field [] attributes = MyBeanClass.class.getDeclaredFields();
Voici un exemple de travail:
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();
}
}
}
}
obtenir toutes les propriétés / variables (juste le nom) en utilisant la réflexion. Maintenant, utilisez getProperty , méthode pour obtenir la valeur de cette variable