Como obter a lista de todos os atributos de um objeto Java usando BeanUtils introspecção?
-
10-07-2019 - |
Pergunta
Eu tenho método que recebe um POJO como parâmetro a sua. Agora eu quero obter programaticamente todos os atributos do POJO (porque meu código não pode saber quais são todos os atributos em que em tempo de execução) e necessidade de obter os valores para o também atribui. Finalmente eu vou formar uma representação de string do POJO.
Eu poderia usar ToStringBuilder , mas eu quero construir a minha string de saída em determinado formato específico para a minha obrigação.
É possível fazê-lo em BeanUtils!? Se sim, qualquer ponteiros para o nome do método? Se não, eu devo escrever meu próprio código reflexão?
Solução
Você já tentou ReflectionToStringBuilder ? Parece que é que deve fazer o que você descreve.
Outras dicas
Eu sei que isto é uma questão anos de idade, mas eu acho que pode ser útil para os outros.
Eu encontrei uma solução parcial usando este LOC
Field [] attributes = MyBeanClass.class.getDeclaredFields();
Aqui está um exemplo de trabalho:
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();
}
}
}
}
obter todas as propriedades / variáveis ??(apenas o nome) usando a reflexão. Agora use método getProperty para obter o valor dessa variável