簡體   English   中英

在JAXB中編組/解組null

[英]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 ,但是我有許多模型類,並且寧願使用適用於所有類的“集中式”解決方案。

我相信正確的解決方案包括使用MessageBodyWriterMessageBodyReader ,但是我仍然希望內置的機制來處理每個類; 我將處理各個字段(包括字符串和日期)。

您始終可以將Person類屬性設置為默認值。 如果您將PhoneNumber默認設置為“ None”,則將其保存為XML將為您提供以下標記

 <phone_number>None</phone_number>

在任何情況下,PhoneNumber屬性將保持為“ None”,直到您調用設置器來設置電話號碼的實際值。

我希望這有幫助,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM