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

Java 使用Bean Utils填充POJO时为字段设置默认值,java,javabeans,apache-commons,pojo,apache-commons-beanutils,Java,Javabeans,Apache Commons,Pojo,Apache Commons Beanutils,我试图使用BeanUtilsBean.populate(object,fieldnamevsfieldwaluemap)方法填充POJO的字段 我的POJO看起来像: class POJO{ Integer intField; Double doubleField String str; } 目前我有一个HashMap,其中包含字段名和字段值之间的映射 现在使用以下代码: POJO obj = new POJO(); Map<String,String> map = n

我试图使用
BeanUtilsBean.populate(object,fieldnamevsfieldwaluemap)
方法填充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=new POJO();
Map Map=newhashmap();
地图放置(“intField”、“1”);
地图放置(“双字段”、“1.1”);
BeanUtilsBean.populate(对象、映射)
使用我的POJO对象obj中的上述代码,字段intField和doubleField分别填充值1和1.1,这与预期的一样

问题是,字符串字段str get null被分配给它,因为hashmap中没有str的条目,null是string的默认值。 但我希望有一种明确的方法,可以在映射中未提及自定义值时将其设置为字段。 对于本例,假设我想将str设置为“john”,因为映射中没有str的条目。 编辑1: 这也应该是特定于字段类型的。因此,如果POJO中还有其他字段,并且它们是字符串类型的,那么对于所有这些字符串字段,映射中没有其条目的字段应该用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");
    }
}
Map=newhashmap(){//newhashmap
@凌驾
公共字符串get(对象键}{
return super.getOrDefault(key,“john”);
}
}
如果希望每个字段具有不同的默认值,请使用带有默认值前缀的本地映射


然后,您应该创建自己的类。

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

好吧……只需为该字符串设置一个默认值,
string str=“john”;
,否则它将被HashMap中传递的值替换。pojo是在不同的项目中定义的,我没有提交权限,因此无法以这种方式真正设置默认值。而且我有多个fieldsok,请将此信息添加到您的问题中,因为它非常重要:)fine补充道:)我不知何故认为这可以通过org.apache.commons.beanutils.ConvertUtilsBean实现,但无法在他们的文档中找到有用的东西。据我所知,这将尝试将POJO中但地图中没有的所有字段的值设置为“John”。相反,我只需要为字符串做这件事fields@DockYard然后您需要在字段上进行区分,比如使用字符串字段名的本地映射,每个反射可能确定一次。