gpt4 book ai didi

java - Jackson XML - 反序列化空类和多态性

转载 作者:数据小太阳 更新时间:2023-10-29 02:44:26 25 4
gpt4 key购买 nike

我有以下界面:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT)
@JsonSubTypes({
@JsonSubTypes.Type(value = EmptyProxy.class, name = "empty"),
... other types not included ...
})
public interface Proxy {
}

我有以下实现:

@JsonTypeName("empty")
public static class EmptyProxy implements Proxy {
}

如您所见,它只是一个空类。我在这个例子中遗漏了其他(有效的)实现。

我有以下容器数据类:

public static class Data {
@JacksonXmlProperty(localName = "name")
private String name;
@JacksonXmlProperty(localName = "proxy")
private Proxy proxy;
}

反序列化 EmptyProxy 似乎不起作用。例如:

final ObjectMapper mapper = new XmlMapper().registerModule(new JacksonXmlModule());
final Data data = mapper.readValue("<data><name>my-name</name><proxy><empty/></proxy></data>", Data.class);

这给出了以下异常:

Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of Test$EmptyProxy out of VALUE_NULL token
at [Source: java.io.StringReader@59ec2012; line: 1, column: 42] (through reference chain: Data["proxy"])
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148)
at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:857)

这是 Jackson 中的错误吗? FWIW,当我向 EmptyProxy 添加一个虚拟字段时,它起作用了。

更新

我只尝试使用 JAXB,得到了相同的结果。代码:

public static class Data {
@XmlElement(name = "name")
private String name;
@XmlElements({
@XmlElement(type = EmptyProxy.class, name = "empty")
})
private Proxy proxy;
}

public interface Proxy {
}

@XmlType(name = "empty")
public static class EmptyProxy implements Proxy {
}

public static void main(String[] a) throws IOException {
final ObjectMapper mapper = new XmlMapper()/*.registerModule(new JacksonXmlModule())*/.registerModule(new JaxbAnnotationModule());
final Data data = mapper.readValue("<data><name>my-name</name><proxy><empty></empty></proxy></data>", Data.class);
}

最佳答案

我为此创建了一个错误条目。参见 http://github.com/FasterXML/jackson-dataformat-xml/issues/169 .

关于java - Jackson XML - 反序列化空类和多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33722369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com