我有一个应用程序,我需要在根级别使用不同的标签序列化 XML。
我使用以下场景实现了一个测试用例,通过相同的输入我得到了两个 xml。
<ClassTypeA>
<fieldA>a</fieldA>
</ClassTypeA>
Run Code Online (Sandbox Code Playgroud)
和
<ClassTypeB>
<fieldB>b</fieldB>
</ClassTypeB>
Run Code Online (Sandbox Code Playgroud)
为了序列化,我实现了这三个类:
<ClassTypeA>
<fieldA>a</fieldA>
</ClassTypeA>
Run Code Online (Sandbox Code Playgroud)
在下面使用此测试会返回以下错误:
<ClassTypeB>
<fieldB>b</fieldB>
</ClassTypeB>
Run Code Online (Sandbox Code Playgroud)
com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve type id 'fieldA' as a subtype of `br.com.eletra.filemode.uaa.converter.TestXml`: known type ids = [ClassTypeA, ClassTypeB]
at [Source: (StringReader); line: 2, column: 2]
Run Code Online (Sandbox Code Playgroud)
但是,在结构的开头插入任何标签时,序列化是成功的。
我用演绎类型的jackson 2.12做了另一个测试。
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT)
@JsonSubTypes({
@JsonSubTypes.Type(value = TestConcreteDisconnectXML.class, name = "ClassTypeA"),
@JsonSubTypes.Type(value = TestConcreteConnectXML.class, name = "ClassTypeB"),
})
abstract class TestXml{
}
@Getter
@Setter
class TestConcreteDisconnectXML extends TestXml{
private String fieldA; …Run Code Online (Sandbox Code Playgroud)