【问题标题】:Populate Java Object using Map使用 Map 填充 Java 对象
【发布时间】:2019-10-09 04:56:32
【问题描述】:

我有一个 Map<String, Object> 。使用它,我必须填充一个 java 对象。例如,

public void setBaseAttributes(BaseObject baseObj) {
  Map<String, Object> map = // some method call;
  org.apache.commons.beanutils.BeanUtils.populate(baseObj, map);
 }

我正在使用 BeanUtils,但由于 BeanUtils 无法处理 BigDecimal,因此卡住了。我的 baseObj 有 BigDecimal,我无法摆脱它。

向专家提出的问题是:

  • 我可以在这里使用更好的替代方案吗?
  • 使用 BeanUtils,我们可以做点什么来处理 BigDecimal 吗?

【问题讨论】:

  • 您遇到了什么错误,您使用的是什么版本的 BeanUtils?它似乎适用于 1.9.3。
  • 嗨@heisbrandon,我使用的是1.9.3,这是相关的跟踪:justpaste.it/24lva
  • 好的。问题不在于 BigDecimal。我在地图中有大小数的空值,这导致 BeanUtils 失败。我一直在寻找更可靠的方法,它可以与地图中存在的任何值一起形成。如果 map 中没有对应的值,则应该在 object 中为该字段设置 null。我的对象包含枚举、BigDecimal、Double、String。

标签: java reflection bigdecimal objectmapper apache-commons-beanutils


【解决方案1】:

根据您的评论,您在使用 null 或缺少 BigDecimal 值时似乎遇到了问题。您可以使用以下提供的默认值为 BigDecical 注册不同的转换器:

    Object defaultValue = null;
    BigDecimalConverter converter = new BigDecimalConverter(defaultValue);
    ConvertUtils.register(converter, BigDecimal.class);

有关详细信息,请参阅 ConvertUtilsBigDecimalConverter 的文档。 ConvertUtilsBean 文档中还有更具体的信息。

【讨论】:

    猜你喜欢
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多