BeanUtils - 通用地图数组上的setProperty

时间:2016-05-16 16:30:46

标签: java apache-commons-beanutils

我试图在通用地图上使用Apache Commons Bean Util,如下所示:

这是地图:

public class MyObject {
    public Map<String, ?> attributes = new HashMap<String, Object>();
}

这是地图中的内容的json表示:

"attributes": {
        "attr1": "value1",
        "attr2": "value2",
        "attrN": "valueN",
        "nestedObject" :{
            "nestedAttr" : "value1",

            "nestedAttr2" : "value2"
        },
        "simpleArray":["value1", "value1"]
    }

以下是我尝试使用setProperty修改其中一个值的方法:

org.apache.commons.beanutils.BeanUtils.setProperty(myObject, "attributes.simpleArray[0]", "newValue");

嵌套属性工作正常。但是,当其中一个嵌套属性是数组时,我得到以下异常:

java.lang.IllegalArgumentException:Map类型的对象不支持索引或映射属性:simpleArray [0]

如果我尝试设置一个简单的属性,这是有效的:

org.apache.commons.beanutils.BeanUtils.setProperty(myObject, "attributes.attr1", "newValue");

但不是数组。这是什么问题?

1 个答案:

答案 0 :(得分:0)

如错误所示,您可以将新数组设置为数组字段,但不能设置数组的特定索引。 Bean utils适用于字段getter / setter,因此它可以获取/设置对象的字段,但不能获取数组或列表或映射的特定索引。