morphia обрабатывает неверные данные

Скажем, у меня есть такой json в монго:

{"n":"5"}

и такой класс Java:

@Entity 
public class Example {
    Integer n;
}

Это работает (я знаю, что json должен хранить значение как int, а не как строку, но я не контролирую эту часть).

Теперь, когда у меня есть такие данные, как эти морфии, выдает:

{"n":""}

Я ищу обходной путь (я бы хотел, чтобы пустая строка обрабатывалась так же, как нуль).

Единственный обходной путь, который у меня есть до сих пор, это:

public class Example {
    String n;

    public Integer getN() {
        return NumberUtils.isNumber(n) ? NumberUtils.createInteger(n) : null;
    }
}

Но я надеюсь найти способ повесить аннотацию на свойство Integer, которая настраивает поведение десериализации.


person Kevin    schedule 18.11.2011    source источник


Ответы (1)


Поэтому я спросил об этом в группе morphia google и решил поделиться ответом. Использование аннотации жизненного цикла @PreLoad позволяет мне изменять DBObject до того, как произойдет преобразование в POJO. Итак, это должно сделать это:

@PreLoad void fixup(DBObject obj) {
    if (StringUtils.isEmpty(obj.get("n"))) {
        obj.put("n",null);
    }
}
person Kevin    schedule 18.11.2011
comment
Благодарю вас! Новичок в морфии, и у меня была такая же проблема. У меня была дата, хранящаяся в виде строки, и когда я пошел исправлять тип данных, ничего не загружалось. IllegalArgumentException из-за неправильного формата строки. Теперь я могу исправить DbObject перед сопоставлением. - person NewfrontSolutions; 22.01.2016
comment
Кроме того, в версии Morphia, которую я использую, мне нужно было использовать com.mongodb.BasicDBObject. - person NewfrontSolutions; 22.01.2016