JAXBアノテーションを使用したJacksonのObjectMapperで問題が発生しています。具体的には、インターフェイスの一般的な情報を含むコレクションがあり、XMLからの入力を逆シリアル化することはできますが、Jacksonでは(JAXBイントロスペクターを使用して)できません。たぶん、いくつかの構成プロパティまたはJAXBアノテーションが欠落しているだけですか?問題は、「抽象型は追加の型情報でのみインスタンス化できる」ということです。型情報を含む@XmlElementRef(または@XmlElement)でこの問題を処理できると思いましたが、明らかにそうではありません。
可能であれば、JAXBアノテーションのみを使用したいことに注意してください。たとえば、@JsonTypeInfoまたは@JsonDeserializeを使用するのが最後になります。
IEntry.java:
@XmlSeeAlso(Entry.class)
public interface IEntry {
String getValue();
}
Entry.java:
@XmlRootElement(name = "entry")
public class Entry implements IEntry {
@XmlElement(name = "value")
String value;
public Entry() {
}
public Entry(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
Aggregator.java:
@XmlRootElement(name = "aggregator")
public class Aggregator {
@XmlElementRef(type = Entry.class)
private Set<IEntry> entries;
public Aggregator() {
}
public Aggregator(Set<IEntry> entries) {
this.entries = entries;
}
public Set<IEntry> getEntries() {
return entries;
}
}
試験方法:
@Test
public void testSerialization() throws Exception {
ObjectMapper om = new ObjectMapper();
AnnotationIntrospector intr = new JaxbAnnotationIntrospector();
om.getDeserializationConfig().withAnnotationIntrospector(intr);
String json = "{\"entries\":[{\"value\":\"X\"},{\"value\":\"Y\"},{\"value\":\"Z\"}]}\";\n}";
Aggregator agr = om.readValue(json, Aggregator.class);
}
すべての応答をありがとう