【问题标题】:Set default value for a field while populating POJO using Bean Utils使用 Bean Utils 填充 POJO 时设置字段的默认值
【发布时间】:2019-05-28 06:52:55
【问题描述】:

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

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

【问题讨论】:

  • 好吧...只需为该字符串设置一个默认值 String str = "john"; ,否则它将被 HashMap 中传递的值替换
  • pojo 是在不同的项目中定义的,我没有提交访问权限,因此无法以这种方式设置默认值。而且我有多个领域
  • 好的,将此信息添加到您的问题中,因为它非常重要:)
  • fine added :) 我不知何故认为这可以通过 org.apache.commons.beanutils.ConvertUtilsBean 来实现,但在他们的文档中没有很好的帮助

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


【解决方案1】:

基本上你可以这样做:

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

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

那你应该自己开课了。

【讨论】:

  • 按照我的理解,这将尝试将 POJO 中存在但地图中不存在的所有字段的值设置为“John”。相反,我只需要为字符串字段做这件事
  • @DockYard 那么您需要在字段上进行区分,例如使用字符串字段名称的本地映射,可能每次反射确定一次。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    相关资源
    最近更新 更多