XML в Java, как показать нулевой бин Java-атрибута @XmlElement в виде пустого значения в XML (решение найдено)
Я работаю в проекте. Есть Java-бин с некоторыми свойствами. Я помечаю каждый атрибут тегом @XmlElement, например так:
@XmlElement(name="id", nillable = true)
private String test;
Я поставил этот "nillable", он показывает мне тег, даже когда NULL истина, но он показывает мне сообщение в XML, когда NULL
<id xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
Но когда он нулевой, я хочу показать пустое значение только с тегами, как это
<id></id>
И я не знаю, как это сделать. Я искал, но я не нашел как, вот почему я спрашиваю.
И еще 1 вещь, я могу сгенерировать XML без атрибутов? Поскольку я - мой XML, я должен генерировать пустые теги aloot, внутри которых нет ничего, только теги, и я не хочу выделять атрибуты, если я не буду использовать это просто для показа тега.
Спасибо!
Импорт и некоторые настройки, которые я использую
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="test")
---------Решение----------
Привет, ребята, я нашел решение. Хочу поделиться, если кто-то застрял в той же проблеме. Или объявить свойство класса пустым, например String personName = "";
Им не нужно создавать геттеры и сеттеры, если вы не будете изменять это значение и просто хотите, чтобы теги применялись в XML, но были пустыми.
Примечание. Для этой работы вы должны использовать @XmlAccessorType(XmlAccessType.FIELD) в своем классе. Спасибо всем. до свидания
1 ответ
Есть два способа представить null
значение в XML.
Одним из вариантов является описанный xsi:nil
, Он просто добавляет пустой тег для вашего атрибута и аннотирует его как содержащее нулевое значение. Эта форма генерируется JAXB, если вы аннотируете свои атрибуты nillable = true
,
Обратите внимание, что пустой тег не совпадает с тегом с пустой строкой, но об этом позже.
Другой вариант - вообще не представлять этот атрибут. Там просто не будет тег для атрибута в XML. JAXB использует этот подход по умолчанию, если вы не аннотируете свой Java-код nillable = true
но атрибуты все равно будут иметь null
ценности.
И это все.
Теперь о том, чего вы хотите достичь. Rendering <id></id>
в основном означает, что у вас есть id
атрибут, который содержит пустую строку. Хотя вы, вероятно, могли бы найти язык, когда это эквивалентно null
значение (например, Oracle PL/SQL), это явно не эквивалент null
значение в Java.
Более того, если id
моделируется как long
или же int
(или любой не-String тип) в вашем Java Bean, парсер не сможет десериализовать такой XML обратно в экземпляр компонента.