2016-05-16 1 views
0

Я пытаюсь использовать Apache Commons Bean Util на родовом карте так:BeanUtils - SetProperty на общий массив карт

Это карта:

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: индексированные или отображенные свойства не поддерживаются на объектах типа карты: simpleArray [0]

Это работает, если Я пытаюсь установить простое свойство вроде:

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

Но не с массивом. В чем проблема?

ответ

0

Как говорится в ошибке, вы можете установить новый массив в поле массива, но не конкретный индекс массива. Bean utils работает на полевых геттерах/сеттерах, чтобы он мог получать/устанавливать поля объекта, но не специфический индекс массива, списка или карты.