将POJO转换为适用于GWT的Map

时间:2013-06-24 09:08:20

标签: java gwt

想法是有一个POJO:

class MyBean {
  long id;
  int count;
  public void setCount(int count){
   this.count = count;
  }
}

现在,我需要将计数自动存储为:

put("count", count);

或简单地说,put("fieldname", fieldvalue);

是否有一个可用于MyBean可以用于此目的的库?我可以很容易地做一个复制构造函数或者其他东西,但是,这里的重点是自动化,而且我的应用程序中有很多模型将使这个Map存储POJO值......

1 个答案:

答案 0 :(得分:0)

您可以使用Apache Commons BeanUtils' PropertyUtils

创建一个简单的PropertyMapGenerator
public class PropertyMapGenerator {
    public static Map<String, Object> getPropertyMap(Object object) {
    HashMap<String, Object> propertyMap = new HashMap<>();

    // retrieve descriptors for all properties
    PropertyDescriptor[] descriptors = PropertyUtils.getPropertyDescriptors(object);

    for (PropertyDescriptor descriptor : descriptors) {
        // check if there is a reader method for this property i.e. if it can be accessed
        if (descriptor.getReadMethod() != null) {
            String name = descriptor.getName();
            try {
                propertyMap.put(name, PropertyUtils.getProperty(object, name));
            } catch (Exception e) {
                // handle this properly
                e.printStackTrace();
            }
        }
    }

    return propertyMap;
    }
}

现在您只需将POJO传递给此生成器:

Map<String, Object> propertyMap = PropertyMapGenerator.getPropertyMap(myBean);