编组时可选的JAXB xml属性

编组时可选的JAXB xml属性,jaxb,xml-attribute,Jaxb,Xml Attribute,当我使用JAXB封送java对象时,我得到的是xml元素 <error line="12" column="" message="test" /> 但我希望xml如下所示 <error line="12" message="test" /> 如果column value为空,则需要获取如上所示的xml,否则需要获取元素中的column属性 有什么方法可以获取它吗?如果相应的字段/属性包含空的字符串值,则属性将仅使用空的字符串值进行编组。如果该值为null,则不

当我使用JAXB封送java对象时,我得到的是xml元素

<error line="12" column="" message="test" />

但我希望xml如下所示

<error line="12" message="test" />

如果column value为空,则需要获取如上所示的xml,否则需要获取元素中的column属性


有什么方法可以获取它吗?

如果相应的字段/属性包含空的
字符串
值,则属性将仅使用空的
字符串
值进行编组。如果该值为null,则不会封送该属性

根目录

UM13218462包;
导入javax.xml.bind.annotation.*;
@XmlRootElement
公共类根{
@XmlAttribute
字符串attributeNull;
@XmlAttribute
字符串属性空;
@XmlAttribute(必需=true)
字符串attributeNullRequired;
}
演示

UM13218462包;
导入javax.xml.bind.*;
公开课演示{
公共静态void main(字符串[]args)引发异常{
JAXBContext jc=JAXBContext.newInstance(Root.class);
根=新根();
root.attributeNull=null;
root.attributeEmpty=“”;
root.attributeNullRequired=null;
Marshaller=jc.createMarshaller();
setProperty(marshaller.JAXB_格式化的_输出,true);
marshaller.marshall(root,System.out);
}
}
输出



感谢您提供的解决方案。在基本类型(如int)的情况下如何做同样的事情?@Suresh-您是指
int
您得到的
foo=“0”
?您可以将字段/属性改为
Integer
。那么,当它有一个空值时,它将不会写入属性。@BlaiseDoughan,您能告诉我们如何构造xsd,使它在类中生成基元包装而不是基元类型吗?我有这样一个:它以浮点形式从分数字段生成,然后我无法在结果XML中去掉它。