BeanUtils - setProperty для универсального массива карт

Я пытаюсь использовать 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 ответ

Решение

Как говорится в ошибке, вы можете установить новый массив в поле массива, но не конкретный индекс массива. Утилиты bean работают с полевыми получателями / установщиками, поэтому могут получать / устанавливать поля объекта, но не определенный индекс массива, списка или карты.

Другие вопросы по тегам