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 работают с полевыми получателями / установщиками, поэтому могут получать / устанавливать поля объекта, но не определенный индекс массива, списка или карты.