java - 即使在 JAXB 中从 XmlAdapter 返回 null 后,标记也不会从 XML 中删除
问题描述
- 我想从 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;
请建议,如何完全删除姓氏?我需要删除很多字段,因此需要类似行的解决方案。
解决方案
您可以使用 设置 XML 的LastName
元素定义required=true
。
这将导致生成的lastName
属性被注释@XmlAttribute(required=true)
。
这样,如果元素为空,JAXB 就不会序列化该元素。
推荐阅读
- jsp - 在html中使用变量的值作为变量
- awk - 连接两个具有共同模式但具有多个 lign 的文件
- python - 使用某些程序时,pynput 无法监听键盘输入
- windows - 如何更好地处理 CommandBar 中的长项目名称
- python - 如果在循环期间发生异常:如何在传递异常之前返回中间结果?
- android - Android 库模块中的房间数据库设置
- javascript - 加载微调器 div 未及时呈现
- javascript - 错误:在 AWS lambda 函数中使用 ssh2-sftp-client 连接到 SFTP 服务器会引发超时
- python - 是否可以从 Azure Blob 存储容器中读取所有文件,并在使用 Python 读取后删除文件?
- javascript - 如何修复“类型 'Promise<{}>' 缺少来自类型 'Observable 的以下属性
'" 角度