[英]Marshalling/Unmarshalling nulls in JAXB
我在使用JAXB從XML(JAX-RS)編組/解組的REST Server中有幾個手寫的Java類。
我實現了一個從Scala借用的小類層次結構: Option<T>
, Some<T>
和None<T>
並希望在我的模型中使用它們來區分XML中的null
值和缺失值。
例如,在以下XML中,缺少值phone_number
,並且應將相應的Java模型字段設置為None
:
<person>
<last_name>Jones</last_name>
<first_name>Abe</first_name>
</person>
class Person {
@XmlElement("last_name")
Option<String> lastName;
@XmlElement("first_name")
Option<String> firstName;
@XmlElement("phone_number")
Option<String> phoneNumber;
}
而在此XML消息中,應該將phone_number
設置為new Some(null)
:
<person>
<last_name>Jones</last_name>
<first_name>Abe</first_name>
<phone_number></phone_number>
</person>
我意識到,使用這種方案,我無法區分零長度字符串和空字符串。
我考慮過使用@XmlJavaTypeAdapter
,但是我有許多模型類,並且寧願使用適用於所有類的“集中式”解決方案。
我相信正確的解決方案包括使用MessageBodyWriter
和MessageBodyReader
,但是我仍然希望內置的機制來處理每個類; 我將處理各個字段(包括字符串和日期)。
您始終可以將Person
類屬性設置為默認值。 如果您將PhoneNumber
默認設置為“ None”,則將其保存為XML將為您提供以下標記
<phone_number>None</phone_number>
在任何情況下,PhoneNumber屬性將保持為“ None”,直到您調用設置器來設置電話號碼的實際值。
我希望這有幫助,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.