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

Set default value for a field while populating POJO using Bean Utils

我正在尝试使用 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,因为在 hashmap 中没有 str 的条目,而 null 是 String 的默认值。 但我想要的是一种明确的方法,可以在地图中未提及时将我的自定义值设置为字段。 对于此示例,假设我想将 str 设置为 "john",因为地图中没有 str 的条目。 编辑 1: 而且这应该特定于字段类型。因此,如果 POJO 中还有其他字段并且它们是 String 类型,那么对于所有这些 String 字段,对于那些在 Map 中没有条目的字段应该用 John 填充。

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

基本上你可以这样做:

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

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

那你应该自己做 class。

尝试在 org.apache.commons.beanutils.ConvertUtilsBean class

的帮助下使用 org.apache.commons.beanutils.BeanUtilsBean class