Установите значение по умолчанию для поля при заполнении POJO с помощью Bean Utils - PullRequest
1 голос
/ 28 мая 2019

Я пытаюсь заполнить поля POJO, используя метод BeanUtilsBean.populate(object, fieldNameVSfieldValueMap).

Мой POJO выглядит так:

class POJO{
  Integer intField;
  Double doubleField
  String str;
}

В настоящее время у меня есть HashMap, который содержит карту между именем поля и значением поля.

Теперь со следующим кодом:

POJO obj = new POJO();
Map<String,String> map = new HashMap<>();
map.put("intField", "1");
map.put("doubleField", "1.1");
BeanUtilsBean.populate(obj, map)

С помощью приведенного выше кода в моем объекте POJO obj поля intField и doubleField заполняются значениями 1 и 1.1 соответственно, как и ожидалось.

Проблема в том, что строковое поле str получает нулевое значение, назначенное ему, поскольку в хэш-карте не было записи для str, а null является значением по умолчанию для String. Но я хотел, чтобы был явный способ установить мое пользовательское значение в поле, когда они не упомянуты на карте. Для этого примера допустим, что я хочу установить str в "john", поскольку на карте нет записи для str. Изменить 1: А также это должно быть специфичным для типа поля. Так что если в POJO есть другие поля, и они имеют тип String, то для всех тех полей String, для которых нет записи на карте, следует заполнить John.

Редактировать 2: POJO определен в другом проекте, к которому у меня нет доступа к коммиту, поэтому установка значений по умолчанию в самом POJO не является решением для меня.

Ответы [ 2 ]

2 голосов
/ 28 мая 2019

В основном вы можете сделать:

Map<String, String> map = new HashMap<>() {  // new HashMap<String, String> perhaps
    @Override
    public String get(Object key} {
        return super.getOrDefault(key, "john");
    }
}

Если вы хотите использовать разные значения по умолчанию для каждого поля, используйте локальную карту, предварительно заполненную значениями по умолчанию.

Тогда вам следует создать свой собственный класс.

1 голос
/ 28 мая 2019

Попробуйте использовать класс org.apache.commons.beanutils.BeanUtilsBean с помощью класса org.apache.commons.beanutils.ConvertUtilsBean

...