使用Bean Utils填充POJO时为字段设置默认值

时间:2019-05-28 06:52:56

标签: java javabeans apache-commons pojo apache-commons-beanutils

我正在尝试使用BeanUtilsBean.populate(object, fieldNameVSfieldValueMap)方法填充POJO的字段。

我的POJO如下:

class POJO{
  Integer intField;
  Double doubleField
  String str;
}

当前,我有一个HashMap,其中包含字段名称和字段值之间的映射。

现在输入以下代码:

POJO obj = new POJO();
Map<String,String> map = new HashMap<>();
map.put("intField", "1");
map.put("doubleField", "1.1");
BeanUtilsBean.populate(obj, map)

在我的POJO对象obj中使用上面的代码,字段intField和doubleField分别填充了期望的值1和1.1。

此问题是,字符串字段str被分配了null,因为在哈希图中没有str的条目,并且null是String的默认值。 但是,我想提供一种明确的方法,将我的自定义值设置为在地图中未提及的字段。 对于此示例,可以说我想将str设置为“ john”,因为在地图中没有str的条目。 编辑1: 并且这也应该特定于字段类型。因此,如果POJO中还有其他字段并且它们是String类型的,那么对于所有那些Map中没有在其中输入的String字段,都应使用John填充。

编辑2:POJO是在另一个我没有提交访问权限的项目中定义的,因此在POJO本身中设置默认值对我来说不是解决方案。

2 个答案:

答案 0 :(得分:2)

基本上您可以做到:

Map<String, String> map = new HashMap<>() {  // new HashMap<String, String> perhaps
    @Override
    public String get(Object key} {
        return super.getOrDefault(key, "john");
    }
}

如果您希望每个字段使用不同的默认值,请使用预先填充默认值的本地地图。

那你应该上自己的课。

答案 1 :(得分:1)

尝试在org.apache.commons.beanutils.ConvertUtilsBean类的帮助下使用org.apache.commons.beanutils.BeanUtilsBean类