2011-11-18 65 views
2

比方说,我在蒙戈一些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属性的注释。

回答

6

所以我问了这个关于吗啡谷歌组,我想我会分享答案。使用生命周期注释@PreLoad允许我在转换为POJO之前修改DBObject。所以这应该这样做:

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

谢谢! morphia和我有同样的问题。我有一个日期存储为一个字符串,当我去更正没有加载数据类型。 IllegalArgumentException,因为字符串的格式不正确。我现在可以在映射之前修复DbObject。 – NewfrontSolutions

+0

另外,在我使用的Morphia版本中,我需要使用com.mongodb.BasicDBObject – NewfrontSolutions