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

问题描述 投票:0回答:1
  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?我需要删除很多字段,因此需要在类似的行上找到解决方案。

java jaxb jaxb2
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.