繁体   English   中英

即使从JAXB中的XmlAdapter返回null,也不会从XML中删除标记。

[英]Tag is not getting removed from XML even after returning null from XmlAdapter in JAXB

  1. 我想从XML删除空标记。

<Employee> <FirstName> Amit </ FirstName> <LastName> </ LastName> </ Employee>

因此,在上面的XML中,lastName变为空白,并且当前以XML中的Empty标签表示。 但是我想要以下格式的XML:

<Employee> <FirstName> Amit </ FirstName> </ Employee>

  1. 因此,如下扩展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; } } 
  2. 像下面这样在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; 
  3. 经过以上更改,生成的XML如下所示:

<Employee> <FirstName> Amit </ FirstName> </ LastName> </ Employee>

  1. 在我的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM