I have a bean, is there a way to list bean's all properties without list one by one?
Some beans overide the ToString() method which is handy. Howvere the beans which does not override this method?
You can use BeanInfo via BeanIntrospection as follows:
Object o = new MyBean();
try {
BeanInfo bi = Introspector.getBeanInfo(MyBean.class);
PropertyDescriptor[] pds = bi.getPropertyDescriptors();
for (int i=0; i<pds.length; i++) {
// Get property name
String propName = pds[i].getName();
// Get the value of prop1
Expression expr = new Expression(o, "getProp1", new Object[0]);
expr.execute();
String s = (String)expr.getValue();
}
// class, prop1, prop2, PROP3
} catch (java.beans.IntrospectionException e) {
}
Or you can go with reflection method using one of the following approaches:
see apache commons lang - ReflectionToStringBuilder
You can use reflection. Take declared fields from class, it they are private check if they have setters and getters (remember boolean getter is "isProperty")
Code can look like this:
List<String> properties = new ArrayList<String>();
Class<?> cl = MyBean.class;
// check all declared fields
for (Field field : cl.getDeclaredFields()) {
// if field is private then look for setters/getters
if (Modifier.isPrivate(field.getModifiers())) {
// changing 1st letter to upper case
String name = field.getName();
String upperCaseName = name.substring(0, 1).toUpperCase()
+ name.substring(1);
// and have getter and setter
try {
String simpleType = field.getType().getSimpleName();
//for boolean property methods should be isProperty and setProperty(propertyType)
if (simpleType.equals("Boolean") || simpleType.equals("boolean")) {
if ((cl.getDeclaredMethod("is" + upperCaseName) != null)
&& (cl.getDeclaredMethod("set" + upperCaseName,
field.getType()) != null)) {
properties.add(name);
}
}
//for not boolean property methods should be getProperty and setProperty(propertyType)
else {
if ((cl.getDeclaredMethod("get" + upperCaseName) != null)
&& (cl.getDeclaredMethod("set" + upperCaseName,
field.getType()) != null)) {
properties.add(name);
}
}
} catch (NoSuchMethodException | SecurityException e) {
// if there is no method nothing bad will happen
}
}
}
for (String property:properties)
System.out.println(property);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With