使用映射填充Java对象

使用映射填充Java对象,java,reflection,bigdecimal,objectmapper,apache-commons-beanutils,Java,Reflection,Bigdecimal,Objectmapper,Apache Commons Beanutils,我有一张地图。使用它,我必须填充一个java对象。比如说, public void setBaseAttributes(BaseObject baseObj) { Map<String, Object> map = // some method call; org.apache.commons.beanutils.BeanUtils.populate(baseObj, map); } public void setBaseAttributes(BaseObject bas

我有一张
地图
。使用它,我必须填充一个java对象。比如说,

public void setBaseAttributes(BaseObject baseObj) {
  Map<String, Object> map = // some method call;
  org.apache.commons.beanutils.BeanUtils.populate(baseObj, map);
 }
public void setBaseAttributes(BaseObject baseObj){
Map=//一些方法调用;
org.apache.commons.beanutils.beanutils.populate(baseObj,map);
}
我用的是BeanUtils,但因为BeanUtils不能处理BigDecimal,所以被卡住了。我的baseObj有一个大十进制,我无法摆脱它

向专家提出的问题是:

  • 这里有更好的选择吗
  • 使用BeanUtils,我们能做些什么来处理BigDecimal吗

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

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

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

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

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

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

您遇到了什么错误,您使用的是什么版本的BeanUtils?它似乎适用于1.9.3.Hi@heisbrandon,我使用的是1.9.3,这是相关的跟踪:Ok。问题不在于BigDecimal。我在地图上的大小数点的值为空,这导致了BeanUtils失败。我一直在寻找更可靠的,它可以只与地图中存在的任何值一起形成。若映射中并没有相应的值,那个么它应该只为对象中的该字段设置null。我的对象包含enum、BigDecimal、Double和String。您得到的错误是什么?您使用的是什么版本的BeanUtils?它似乎适用于1.9.3.Hi@heisbrandon,我使用的是1.9.3,这是相关的跟踪:Ok。问题不在于BigDecimal。我在地图上的大小数点的值为空,这导致了BeanUtils失败。我一直在寻找更可靠的,它可以只与地图中存在的任何值一起形成。若映射中并没有相应的值,那个么它应该只为对象中的该字段设置null。我的对象包含enum、BigDecimal、Double和String。