使用 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
我正在尝试使用 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