2011-02-27 39 views
7

我有一個DTO類與領域,如:JAXB:如何讓JAXB不來解組空字符串0

@XmlAttribute 
@NotNull 
private Integer number = null; 

我想組XML如

... number="" ... 

我需要nuber字段保持爲空,以便引發驗證異常。相反,JAXB會將其解組爲0. 如何才能使其行爲正確?

回答

9

可爭辯,它表現正確。 number=""不等於空,它是一個空字符串,而且JAXB必須正確地嘗試並處理它,並且它確定對於整數數據類型最接近空字符串的值爲零。如果你想要一個null,那麼number屬性應該被完全省略。

如果您想自定義此行爲,您需要編寫一個javax.xml.bind.annotation.adapters.XmlAdapter的子類,它可以以您想要的方式處理原始字符串與綁定類型(即字符串與整數之間的轉換)。然後通過用@XmlJavaTypeAdapter註釋字段來連接該適配器。

+1

我完全不同意這是一個正確的行爲。在空字符串和int之間沒有隱式轉換(例如,在這種情況下,Integer.parseInt(「」)會拋出NumberFormatException。)。並不是我想要一個空值 - 我是非編組客戶端輸入,並且在number屬性被忽略或沒有值的情況下,返回的錯誤代碼應該是相同的。 – 2011-02-27 12:55:17

+2

@RA:你可能不同意,不夠公平,但我同樣堅決不同意空字符串是「沒有價值」。它*是一個值,它是一個空字符串,與'null'不同。但無論我們認爲哪一個是「正確的」,所有重要的是JAXB的想法。 – skaffman 2011-02-27 13:02:36

+0

空字符串不是「無值」,它只是一個「不可轉換爲int值」:) – 2011-02-27 13:35:35