JAXB (JSR-222)实现将输出一个空字符串值""
作为一个空元素。您可以将address
属性设置为此以获得所需的效果。
更新#1
我已经更新了我的问题。基本上地址元素是NULL。该解决方案是否也适用于此?
您可以利用Marshal 事件回调来调整address
.
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.*;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {
private String name;
private String address;
private void beforeMarshal(Marshaller marshaller) {
if(null == address) {
address = "";
}
}
private void afterMarshal(Marshaller marshaller) {
if("".equals(address)) {
address = null;
}
}
}
更新#2
唯一需要担心的是,如果我在课堂上有 10 个字段,我将不得不为所有字段编写 if。还有其他解决方案吗?
如果您使用EclipseLink MOXy作为您的 JAXB 提供程序(我是 MOXy 的负责人),那么您可以将 anXmlAdapter
用于此用例。
XmlAdapter(字符串适配器)
package forum14691333;
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class StringAdapter extends XmlAdapter<String, String> {
@Override
public String marshal(String string) throws Exception {
if(null == string) {
return "";
}
return string;
}
@Override
public String unmarshal(String string) throws Exception {
if("".equals(string)) {
return null;
}
return string;
}
}
包信息
然后,如果您在包级别指定它,它将应用于该包中的所有映射字段/类型String
的属性。
@XmlJavaTypeAdapter(value=StringAdapter.class, type=String.class)
package forum14691333;
import javax.xml.bind.annotation.adapters.*;
了解更多信息