Я пытаюсь заполнить поля 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 присваивается значение null, так как в хэш-карте для str не было записи, а null является значением по умолчанию для String. Но я хочу, чтобы был явный способ установить мое пользовательское значение в поле, когда они не упоминаются на карте. В этом примере допустим, что я хочу установить для str значение «john», так как на карте нет записи для str. Редактировать 1: А также это должно быть специфично для типа поля. Итак, если в POJO есть другие поля, и они имеют тип String, то для всех тех полей String, для которых нет записи на карте, следует заполнить John.
Редактировать 2: POJO определен в другом проекте, к которому у меня нет доступа для фиксации, поэтому установка значений по умолчанию в самом POJO не является для меня решением.
Pojo определен в другом проекте, к которому у меня нет доступа для фиксации, поэтому я не могу установить значения по умолчанию таким образом. А также у меня есть несколько полей
хорошо, добавьте эту информацию к своему вопросу, потому что это очень важно :)
отлично добавлено :) Я как-то думал, что это можно сделать через org.apache.commons.beanutils.ConvertUtilsBean, но не смог найти полезную вещь в их документации
В основном вы можете сделать:
Map<String, String> map = new HashMap<>() { // new HashMap<String, String> perhaps
@Override
public String get(Object key} {
return super.getOrDefault(key, "john");
}
}
Если вам нужны разные значения по умолчанию для каждого поля, используйте локальную карту, предварительно заполненную значениями по умолчанию.
Затем вы должны создать свой собственный класс.
Насколько я понимаю, это попытается установить значение «Джон» для всех полей, которые есть в POJO, но отсутствуют на карте. Вместо этого мне нужно, чтобы это было сделано только для строковых полей
@DockYard, тогда вам нужно различать поля, например, используя локальную карту имен строковых полей, возможно, определяемую один раз для каждого отражения.
Попробуйте использовать класс org.apache.commons.beanutils.BeanUtilsBean с помощью класса org.apache.commons.beanutils.ConvertUtilsBean.
ну... тогда просто установите для этой строки значение по умолчанию,
String str = "john";
, иначе оно будет заменено значением, переданным в HashMap