Морфия обрабатывает плохие данные - PullRequest
2 голосов
/ 18 ноября 2011

Допустим, у меня есть такой 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, которое настраивает поведение десериализации.

1 Ответ

6 голосов
/ 19 ноября 2011

Итак, я спросил об этом в группе Google Morphia, и я подумал, что поделюсь ответом. Использование аннотации жизненного цикла @PreLoad позволяет мне изменять DBObject до того, как произойдет преобразование в POJO. Так что это должно сделать это:

@PreLoad void fixup(DBObject obj) {
    if (StringUtils.isEmpty(obj.get("n"))) {
        obj.put("n",null);
    }
}
...