7
我有一個DTO類與領域,如:JAXB:如何讓JAXB不來解組空字符串0
@XmlAttribute
@NotNull
private Integer number = null;
我想組XML如
... number="" ...
我需要nuber字段保持爲空,以便引發驗證異常。相反,JAXB會將其解組爲0. 如何才能使其行爲正確?
我有一個DTO類與領域,如:JAXB:如何讓JAXB不來解組空字符串0
@XmlAttribute
@NotNull
private Integer number = null;
我想組XML如
... number="" ...
我需要nuber字段保持爲空,以便引發驗證異常。相反,JAXB會將其解組爲0. 如何才能使其行爲正確?
可爭辯,它是表現正確。 number=""
不等於空,它是一個空字符串,而且JAXB必須正確地嘗試並處理它,並且它確定對於整數數據類型最接近空字符串的值爲零。如果你想要一個null
,那麼number
屬性應該被完全省略。
如果您想自定義此行爲,您需要編寫一個javax.xml.bind.annotation.adapters.XmlAdapter
的子類,它可以以您想要的方式處理原始字符串與綁定類型(即字符串與整數之間的轉換)。然後通過用@XmlJavaTypeAdapter
註釋字段來連接該適配器。
我完全不同意這是一個正確的行爲。在空字符串和int之間沒有隱式轉換(例如,在這種情況下,Integer.parseInt(「」)會拋出NumberFormatException。)。並不是我想要一個空值 - 我是非編組客戶端輸入,並且在number屬性被忽略或沒有值的情況下,返回的錯誤代碼應該是相同的。 – 2011-02-27 12:55:17
@RA:你可能不同意,不夠公平,但我同樣堅決不同意空字符串是「沒有價值」。它*是一個值,它是一個空字符串,與'null'不同。但無論我們認爲哪一個是「正確的」,所有重要的是JAXB的想法。 – skaffman 2011-02-27 13:02:36
空字符串不是「無值」,它只是一個「不可轉換爲int值」:) – 2011-02-27 13:35:35