BeanUtils - 通用地图数组的 setProperty

BeanUtils - setProperty on generic array of maps

我正在尝试在通用地图上使用 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");

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

如错误所述,您可以为数组字段设置一个新数组,但不能设置数组的特定索引。 Bean utils 在字段 getter/setters 上工作,因此它可以 get/set 一个对象的字段但不是数组或列表或映射的特定索引。