即使在JAXB中从XmlAdapter返回null之后,也不会从XML中删除Tag

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了即使在JAXB中从XmlAdapter返回null之后,也不会从XML中删除Tag相关的知识,希望对你有一定的参考价值。

  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?我需要删除很多字段,因此需要在类似的行上找到解决方案。

答案

您可以使用LastName设置XML的required=true元素定义。 这将导致生成的lastName属性使用@XmlAttribute(required=true)进行注释。 这样,如果元素为null,则JAXB不会序列化该元素。

以上是关于即使在JAXB中从XmlAdapter返回null之后,也不会从XML中删除Tag的主要内容,如果未能解决你的问题,请参考以下文章

JAXB XMLAdapter 方法不抛出异常

需要从绑定文件中生成 package-info.java 中的 JAXB 注释

如何使用 JAXB2.0 禁用 DTD 获取

为对象显示 null -JSON- JAXB

JAXB - unmarshalled字段为null

带有JAXB的WebService - 参数包含null