2011-11-18 34 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