[英]JAXB Unmarshaller returning null in object after parsing from XML
[英]Tag is not getting removed from XML even after returning null from XmlAdapter in JAXB
<Employee> <FirstName> Amit </ FirstName> <LastName> </ LastName> </ Employee>
因此,在上面的XML中,lastName变为空白,并且当前以XML中的Empty标签表示。 但是我想要以下格式的XML:
<Employee> <FirstName> Amit </ FirstName> </ Employee>
因此,如下扩展XmlAdapter:
package com.jaxb.domain; import javax.xml.bind.annotation.adapters.XmlAdapter; import org.springframework.util.StringUtils; public class NullifyAdapter extends XmlAdapter<String, String> { @Override public String unmarshal(String strValue) throws Exception { // TODO Auto-generated method stub return strValue; } @Override public String marshal(String strValue) throws Exception { if (StringUtils.isEmpty(strValue)) { return null; } return strValue; } }
像下面这样在package-info.java中注册一个包级别:
@XmlJavaTypeAdapters({ @XmlJavaTypeAdapter(value=NullifyAdapter.class, type=String.class) }) package com.jaxb.domain; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
经过以上更改,生成的XML如下所示:
<Employee> <FirstName> Amit </ FirstName> </ LastName> </ Employee>
在我的jaxb绑定类中,该字段定义为:
@XmlElement(name = "LastName") protected String lastName;
请提出建议,如何完全删除lastName? 我需要删除许多字段,因此希望在类似的行中找到解决方案。
您可以使用required=true
设置XML的LastName
元素定义。
这将导致使用@XmlAttribute(required=true)
注释生成的lastName
属性。
这样,如果JAXB为null,则它不会序列化该元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.