首页
学习
活动
专区
工具
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.6K90
  • 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.6K30

    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 换为重建实体所需的返回子句。

    2.1K10

    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前加一个@标识

    58710

    【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?

    49820

    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实体类。

    97930

    面经手册 · 第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 测试结果分析 排序

    82510

    面经手册 · 第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

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

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

    40360

    总结: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

    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.4K60
    领券