首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用JAXB解组时将空元素转换为null

JAXB(Java Architecture for XML Binding)允许您将Java对象与XML文档之间进行转换。当使用JAXB解组(unmarshalling)XML文档时,有时可能希望将空元素(empty elements)转换为Java对象中的null值。要实现这一目标,可以使用@XmlElement注解的nillable属性,并确保XML文档中的空元素具有xsi:nil="true"属性。

首先,定义一个Java类,该类将映射到XML文档的结构。在这个例子中,我们将创建一个Person类,其中包含firstNamemiddleName属性。

代码语言:javascript
复制
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "person")
public class Person {

    private String firstName;
    private String middleName;

    @XmlElement(nillable = true)
    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    @XmlElement(nillable = true)
    public String getMiddleName() {
        return middleName;
    }

    public void setMiddleName(String middleName) {
        this.middleName = middleName;
    }
}

注意@XmlElement(nillable = true)注解。这告诉JAXB允许将空元素映射为null值。

接下来,创建一个XML文档,其中包含空元素。为了表示空元素,我们在元素上添加了xsi:nil="true"属性。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <firstName>John</firstName>
   <middleName xsi:nil="true"/>
</person>

最后,使用JAXB解组XML文档:

代码语言:javascript
复制
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;

public class JAXBExample {

    public static void main(String[] args) {
        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
               <person xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
                "   <firstName>John</firstName>\n" +
                "   <middleName xsi:nil=\"true\"/>\n" +
                "</person>";

        try {
            JAXBContext jaxbContext = JAXBContext.newInstance(Person.class);
            Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
            StringReader reader = new StringReader(xml);
            Person person = (Person) jaxbUnmarshaller.unmarshal(reader);

            System.out.println("First name: " + person.getFirstName());
            System.out.println("Middle name: " + person.getMiddleName()); // Should be null
        } catch (JAXBException e) {
            e.printStackTrace();
        }
    }
}

运行此代码后,您将看到以下输出:

代码语言:javascript
复制
First name: John
Middle name: null

这表明空元素已成功转换为Java对象中的null值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JAXB应用实例

JAXB使用基础介绍   ① 常用API JAXBContext类,是应用的入口,通过该类创建序列化和反序列化对象,也即编组对象和解组对象; Marshaller 编组接口,Java对象序列化为XML...数据; Unmarshaller 解组接口,XML数据反序列化为Java对象。   ...XML节点元素,name属性可自定义元素名; @XmlAttribute,Java类的一个属性映射为XML节点元素的属性,name属性可自定义属性名; @XmlType,Java类或枚举类型映射到XML...③ 实际应用中注意的问题   ① 如果JavaBean中定义了有参的构造器,那么必须同时定义无参构造器,否则XML会抛无默认构造函数的异常;   ② 成员变量值为NULL,将不会映射成对应的XML元素...——由于基本数据类型默认值不为,所以基本数据类型不设值也会映射成XML元素,值为默认值,所以如果模型需要基本数据,在属性定义的时候尽量使用包装类型;   ③ @XmlAccessorType 注解中如果属性值为

3.5K90

Spring Data JPA 参考文档四

以下示例显示了如何使用 JAXB 解组存储库填充器: 示例 53. 声明解组存储库填充器(使用 JAXB) <?xml version="1.0" encoding="UTF-8"?...这意味着,如果客户端 bean 只是实例存储在一个字段中并且在初始化期间没有使用存储库,那么存储库将不会被实例化。存储库实例将在第一次与存储库交互进行初始化和验证。...,选项 1 不是一个选项,因为标识符始终为非null。...下表描述了 JPA 支持的关键字以及包含该关键字的方法转换为什么: 表 3. 方法名称中支持的关键字 In并且NotIn还可以任何子类Collection作为参数以及数组或可变参数。...运行查询,传递给方法调用的参数将使用先前识别的LIKE模式进行扩充。 本机查询 该@Query注释允许通过nativeQuery标志设置为 true来运行本机查询,如以下示例所示: 示例 63.

3.5K30

Java对象和XML相互转换

但是项目中封装的代码总是很庞大,因为要考虑太多的东西,而对于此,我只能通过小的Demo来说明,其实在项目中用到很多插件,轻巧,灵便,封装很好使用,但这里我讲解的是JAXB(JavaArchitecture...该过程中,JAXB也提供了XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。...JDK中JAXB相关的重要Annotation:(来源于百度百科JAXB) @XmlType,Java类或枚举类型映射到XML模式类型 @XmlAccessorType(XmlAccessType.FIELD...@XmlRootElement,Java类或枚举类型映射到XML元素。 @XmlElement,Java类的一个属性映射到与属性同名的一个XML元素。...XMLSerializer xmlSerializer = new XMLSerializer(); //xml转为json(注:如果是元素的属性,会在json里的key前加一个@标识

40010

Spring认证中国教育管理中心-Spring Data Couchbase教程八

要改为使用 XML 来定义存储库应填充的数据,您可以使用该unmarshaller-populator元素。您将其配置为使用 Spring OXM 中可用的 XML 编组器选项之一。...以下示例显示如何使用 JAXB 解组存储库填充器: 示例 74. 声明解组存储库填充器(使用 JAXB) <?xml version="1.0" encoding="UTF-8"?...另请注意,如果您在 Spring Boot 中运行,则自动配置支持已经为您设置了注释,因此您只需要在想要覆盖默认值使用它。...#n1ql.bucket 换为存储实体的存储桶的名称,以反引号转义。 #n1ql.fields 换为重建实体所需的字段列表(例如,对于 SELECT 子句)。...#n1ql.returning 换为重建实体所需的返回子句。

2K10

【JavaSE专栏89】Java字符串和XML数据结构的转换,高效灵活转变数据

> XML还支持嵌套元素,可以元素嵌套在其他元素中,形成层次结构。...---- 三、XML字符串对象 同学们可以使用一些库来实现将 XML 字符串转换为对象,例比如 Jackson 库就支持 XML 转换。...同学们可以使用 Jackson 库 XML 字符串转换为 Java 对象,当然也可以使用其他的 XML 处理库如 JAXB、DOM 等来实现相同的功能。...---- 四、XML对象字符串 同学们可以使用一些库来实现将对象转换为XML字符串,比如使用Jackson库来实现 XML 对象字符串。...同学们可以使用 Jackson 库 Java 对象转换为 XML 字符串,当然也可以使用其他的 XML 处理库如 JAXB、DOM 等来实现相同的功能。 – 五、XML 面试题 什么是 XML?

35820

SpringMVC笔记(10):数据校验

, "姓名不能为"); ValidationUtils.rejectIfEmpty(errors, "password", null, "密码不能为"); } } 3.控制器...(日期类型)比当前时间早 @NotEmpty 验证注解的元素值不为null且不为(字符串长度不为0、集合大小不为0) @NotBlank 验证注解的元素值不为(不为null、去除首位空格后长度为0)...,不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格 @Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式 接下来我们通过用户注册的场景来学习使用...校验规则详解: Constraint 详细信息 @Null 被注释的元素必须为 null @NotNull 被注释的元素必须不为 null @AssertTrue 被注释的元素必须为 true @AssertFalse...@NotEmpty 被注释的字符串的必须非 @Range 被注释的元素必须在合适的范围内 User实体类。

93830

面经手册 · 第4篇《HashMap数据插入、查找、删除、遍历,源码分析》

而红黑树是在jdk1.8引入到HashMap中解决链表过长问题的,简单说当链表长度>=8链表转换位红黑树(当然这里还有一个扩容的知识点,不一定都会树化MIN_TREEIFY_CAPACITY)。...链表红黑树,如下图; [微信公众号:bugstack虫洞栈,链表红黑树] 以上就是一组链表转换为红黑树的情况,元素包括;40、51、62、73、84、95、150、161 这些是经过实际验证可分配到...do { // 普通节点转换为树节点,但此时还不是红黑树,也就是说还不一定平衡 TreeNode p = replacementTreeNode...链表树化的过程中是先由链表转换为树节点,此时的树可能不是一颗平衡树。同时在树转换过程中会记录链表的顺序,tl.next = p,这主要方便后续树链表和拆分更方便。...,在HashMap还是只链表结构,输出测试结果01 添加元素,在HashMap转换为红黑树时候,输出测试结果02 删除元素,在HashMap转换为链表结构,输出测试结果03 4.3 测试结果分析 排序

1.1K20

面经手册 · 第4篇《HashMap数据插入、查找、删除、遍历,源码分析》

而红黑树是在jdk1.8引入到HashMap中解决链表过长问题的,简单说当链表长度>=8链表转换为红黑树(当然这里还有一个扩容的知识点,不一定都会树化[MIN_TREEIFY_CAPACITY])...微信公众号:bugstack虫洞栈,链表红黑树 以上就是一组链表转换为红黑树的情况,元素包括;40、51、62、73、84、95、150、161 这些是经过实际验证可分配到Idx:12的节点 通过这张图...do { // 普通节点转换为树节点,但此时还不是红黑树,也就是说还不一定平衡 TreeNode p = replacementTreeNode...链表树化的过程中是先由链表转换为树节点,此时的树可能不是一颗平衡树。同时在树转换过程中会记录链表的顺序,tl.next = p,这主要方便后续树链表和拆分更方便。...,在HashMap还是只链表结构,输出测试结果01 添加元素,在HashMap转换为红黑树时候,输出测试结果02 删除元素,在HashMap转换为链表结构,输出测试结果03 4.3 测试结果分析 排序

81110

总结:JDK1.5-JDK1.8各个新特性

JAXB2来实现对象与XML之间的映射 JAXB是Java Architecture for XML Binding的缩写,可以一个Java对象转变成为XML格式,反之亦然。...在Java 8之前一般某个函数应该返回非对象但是偶尔却可能返回了null,而在Java 8中,不推荐你返回null而是返回Optional。...下面几节详细解释常用的Stream操作: Filter 过滤 过滤通过一个predicate接口来过滤并只保留符合条件的元素,该操作属于中间操作,所以我们可以在过滤后的结果来应用其他Stream操作...Function接口来依次元素转成另外的对象,下面的示例展示了字符串转换为大写字符串。...Instant对象,Instant时间点对象可以很容易的转换为老式的java.util.Date。

2K70

【JavaSE专栏88】Java字符串和JSON对象的转换,转来转去就是这么玩!

Jackson 库或 Gson 库一个自定义的 Java 对象转换为 JSON 字符串,可以根据自己的需求选择适合的库来实现 JSON 对象字符串的功能。...Jackson 库或 Gson 库一个自定义的 JSON 字符串 转换为 Java 对象,可以根据自己的需求选择适合的库来实现字符串 JSON 对象的功能。...可以使用 JSONArray 类来处理 JSON 数组,通过索引获取数组元素,或者使用循环遍历数组元素。 六、如何处理嵌套的 JSON 对象?...可以日期和时间转换为特定的格式的字符串进行存储和传输,然后在解析再将字符串转换为日期和时间类型。 九、如何处理 JSON 中的特殊字符?...十、如何处理 JSON 中的字段? 可以使用 null 值来表示 JSON 中的字段,或者根据具体需求使用默认值或空字符串来表示。

32060

JDK 1.5 - 1.8 各版本的新特性总结

JAXB2来实现对象与XML之间的映射 JAXB是Java Architecture for XML Binding的缩写,可以一个Java对象转变成为XML格式,反之亦然。...在Java 8之前一般某个函数应该返回非对象但是偶尔却可能返回了null,而在Java 8中,不推荐你返回null而是返回Optional。...下面几节详细解释常用的Stream操作: Filter 过滤 过滤通过一个predicate接口来过滤并只保留符合条件的元素,该操作属于中间操作,所以我们可以在过滤后的结果来应用其他Stream操作...Function接口来依次元素转成另外的对象,下面的示例展示了字符串转换为大写字符串。...Instant对象,Instant时间点对象可以很容易的转换为老式的java.util.Date。

2.3K60
领券