即使在JAXB中从XmlAdapter返回null之后,也不会从XML中删除Tag
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了即使在JAXB中从XmlAdapter返回null之后,也不会从XML中删除Tag相关的知识,希望对你有一定的参考价值。
- 我想从XML中删除空标记。
<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?我需要删除很多字段,因此需要在类似的行上找到解决方案。
答案
您可以使用LastName
设置XML的required=true
元素定义。
这将导致生成的lastName
属性使用@XmlAttribute(required=true)
进行注释。
这样,如果元素为null,则JAXB不会序列化该元素。
以上是关于即使在JAXB中从XmlAdapter返回null之后,也不会从XML中删除Tag的主要内容,如果未能解决你的问题,请参考以下文章