【问题标题】:Using Jackson XML Mapper, how to serialize more than one properties using same local name使用 Jackson XML Mapper,如何使用相同的本地名称序列化多个属性
【发布时间】:2026-01-29 02:15:01
【问题描述】:

我有一个类的实例,如下所示

public class SomeEntity{
private OpMetric metric = Options.MEASURED;

private Scope scope = Scopes.GLOBAL;

}

需要序列化成下面的XML

<SomeEntity xmlns="">       
    <op-metric>
        <value>0.3</value>
    </op-metric>
    <calculated-scope>          
        <value>updated-global</value>
    </calculated-scope>
</SomeEntity >

在这两种情况下,要在 xml 中设置的值都是根据原始字段的枚举值计算,这意味着我需要使用 getter(+ @JsonIgnore 在字段上)而不仅仅是注释田野。 我尝试在 getter 上使用以下注释来生成格式

@JacksonXmlProperty(isAttribute = false, localName = "value")
@JacksonXmlElementWrapper(localName="op-metric")

但由于使用相同的本地名称时发生冲突,它只能用于其中一个:

com.fasterxml.jackson.databind.JsonMappingException: Conflicting getter definitions for property "value":

使用 Mixins 并没有让我有太大进步,因为显然同样的限制也适用于此。

我应该如何创建这个 XML 结构?

【问题讨论】:

    标签: java xml serialization jackson


    【解决方案1】:

    我最终创建了用于创建 XML 的特殊方法,每个方法都返回一个类的实例,该类的唯一字段名为“value”,然后“自动”被序列化为所需的格式。 使用 Jackson mixin 添加了注释

    【讨论】:

      最近更新 更多