2016-07-21 27 views
1

覆蓋在我的Avro的模式,我定義了這樣產生的Avro構建一套空不使用默認

{ 
    "name": "myfield", 
    "type": "string", 
    "default": "" 
} 

場當我建立我的Avro對象在Java中我設置myfieldnull(我代碼只是從一個地方到另一個地方)

MyObject myObject = MyObject.newBuilder().setMyfield(null).build(); 

我結束了

myObject.getMyfield() == null 
值複製10

這是預期的行爲?難道我做錯了什麼?我曾預料我們最終會以默認值""

因爲null不是這個領域的一個有效的值當我嘗試和序列化對象(用於發送到卡夫卡)

我需要爲null呼籲Builder

+0

這看起來像在Avro中的錯誤。如果參數爲null,那麼setter應該拋出一個異常。這應該獨立於架構中的默認值。 – asmaier

回答

0
setter方法之前檢查該字段

我通過允許null s解決了這個問題。無論如何,最好默認爲null(無意義),而不是""(具有一些含義)。

{ 
    "name": "myfield", 
    "type": [ 
    "null", 
    "string" 
    ], 
    "default": null 
}