2

假设我在 mongo 中有一些这样的 json:

{"n":"5"}

和一个像这样的java类:

@Entity 
public class Example {
    Integer n;
}

这有效(我知道 json 应该将值存储为 int 而不是字符串,但我不控制那部分)。

现在,当我有这样的数据时,morphia 会抛出:

{"n":""}

我正在寻找一种解决方法(我想要的行为是将空字符串视为空字符串)。

到目前为止,我唯一的解决方法是:

public class Example {
    String n;

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

但我希望有某种方法可以在自定义反序列化行为的 Integer 属性上挂一个注释。

4

1 回答 1

6

所以我在 morphia google group 上问了这个问题,我想我会分享答案。使用生命周期注释@PreLoad允许我在转换为 POJO 之前修改 DBObject。所以应该这样做:

@PreLoad void fixup(DBObject obj) {
    if (StringUtils.isEmpty(obj.get("n"))) {
        obj.put("n",null);
    }
}
于 2011-11-18T23:34:40.593 回答