我正在尝试使用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本身中设置默认值对我来说不是解决方案。
答案 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类