微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Jackson 多态树状结构反序列化

如何解决Jackson 多态树状结构反序列化

我有一个像这样的 XML 字符串:

<?xml version="1.0" standalone="yes"?>
<some_element1
    some_attribute1="some string"
    some_attribute2="some string"
    some_attribute3="some string"
>
    <some_element2_list>
        <some_element2
            some_attribute4="some string"
            some_attribute5="some string"
        />
    </some_element2_list>
    <some_element3_list>
        <some_element3
                some_attribute6="some string"
                some_attribute7="some string"
        >
            <some_element4_list>
                <some_element4
                    some_attribute8="some string"
                    some_attribute9="some string"
                />
            </some_element4_list>
            <some_element5_list>
                <some_element5
                    some_attribute10="some string"
                    some_attribute11="some string"
                />
                <some_element5
                    some_attribute10="some string"
                    some_attribute11="some string"
                />
            </some_element5_list>
        </some_element3>
    </some_element3_list>
</some_element1>

所以它是一个递归的树状结构,其中:

我事先不知道元素、属性和列表的名称

我可以使用以下命令将其反序列化为 Java 对象:

xmlMapper.readValue(xml,Object.class);

那么:

是否可以将该结构反序列化为带有注释的自定义 Java 对象?


我尝试了以下类和注释:

@JsonTypeInfo(use = DEDUCTION)
@JsonSubTypes({
        @Type(value = ElementList.class),@Type(value = Attribute.class)
})
public interface Field {}

@Value
@AllArgsConstructor(onConstructor_ = {@JsonCreator(mode = DELEGATING)})
public class Attribute implements Field {
    @JacksonXmlProperty(isAttribute = true)
    String value;
}

@Value
@AllArgsConstructor(onConstructor_ = {@JsonCreator(mode = DELEGATING)})
public class ElementList implements Field {
    @JacksonXmlProperty
    List<Element> elements;
}

@Value
@AllArgsConstructor(onConstructor_ = {@JsonCreator(mode = DELEGATING)})
public class Element {
    Map<String,Field> fields;
}

现在,我收到以下错误

com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve subtype of [simple type,class org.example.Field]: Unexpected input
 at [Source: (File); line: 2,column: 1] (through reference chain: java.util.LinkedHashMap["some_attribute1"])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。