You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Jackson XmlMapper时如何移除Credentials的XML包装节点?

移除Jackson XML序列化中的credentials包装节点

已经通过XmlMapper.builder().defaultUseWrapper(false)禁用了默认包装,但XML输出中仍保留credentials包装节点,无法实现嵌套字段的扁平化输出。

相关代码

UserDAO类

public class UserDAO {
    @JacksonXmlProperty(isAttribute = true)
    private int id;

    private Credentials credentials;
    
    @JacksonXmlProperty(localName = "todos")
    private TasksDAO tasks;

    // getter, setter
}

Credentials类

public class Credentials {
    @JacksonXmlProperty(localName = "name")
    @JsonProperty("name")
    private String username;
    private String password;
   
    // getter, setter
}

XmlMapper配置

XmlMapper
        .builder()
        .defaultUseWrapper(false)
        .addModule(new JavaTimeModule())
        .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
        .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
        .build()

当前与期望输出

当前XML输出

<users>
    <user id="1">
        <credentials>
            <password>123</password>
            <name>Steve</name>
        </credentials>
        <todos/>
    </user>
</users>

期望XML输出

<users>
    <user id="1">
        <password>123</password>
        <name>Steve</name>
        <todos/>
    </user>
</users>

解决方案

defaultUseWrapper(false)仅用于禁用集合类型的默认包装节点(比如List字段自动生成的包装标签),对单个嵌套对象不生效。要扁平化嵌套的Credentials对象,需要在UserDAO的credentials字段上添加@JacksonXmlUnwrapped注解:

修改后的UserDAO类:

public class UserDAO {
    @JacksonXmlProperty(isAttribute = true)
    private int id;

    @JacksonXmlUnwrapped // 添加该注解实现字段扁平化
    private Credentials credentials;
    
    @JacksonXmlProperty(localName = "todos")
    private TasksDAO tasks;

    // getter, setter
}

说明

  • @JacksonXmlUnwrapped是Jackson XML模块提供的注解,作用是将嵌套对象的字段直接序列化到父节点中,不会生成嵌套对象对应的包装标签。
  • 若使用Jackson 2.9及更早版本,可结合@JsonUnwrapped一起使用;新版本中@JacksonXmlUnwrapped已能独立处理XML场景的扁平化需求。

内容的提问来源于stack exchange,提问作者Ero Stefano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 03:15:45