gpt4 book ai didi

java - 当类中包含泛型时, jackson 序列化错误

转载 作者:行者123 更新时间:2023-11-30 02:58:26 24 4
gpt4 key购买 nike

所以我有一个类需要 Jackson 序列化。

public class MyClass<T extends MyInterface> {

private T myGeneric;
private String desc;

....
}

public interface MyInterface {
String getSomeString();
}

public class MySubClass implements MyInterface {
private String info;
....

@Override
public getSomeString() {
return "";
}
}

MyClass myGeneric 下可以有许多类型的其他类 field 。问题是,当我将 JSON 传递到服务器时,Jackson 会抛出错误:problem: abstract types either need to be mapped to concrete types, have custom deserializer, or be instantiated with additional type information .

我调查了周围,大部分只找到了如何使用抽象类解决 jackson 问题的示例,但没有找到此类问题的示例。我还尝试使用 @JsonTypeInfo@JsonSubTypes注释列出 MyClass 下可以包含哪些类型的类但我不确定我所做的是否是错误的,因为很难找到任何类似的例子以及 here: 中的文档也没有真正的帮助。

这种问题可以通过 Jackson 注释解决吗?还是我需要为我的类编写一个自定义序列化器?

我正在测试这样的序列化:

String json = "myJson";
ObjectMapper mapper = new ObjectMapper();
MyClass myClass = mapper.readValue(json, MyClass.class);

最佳答案

Jackson 无法在没有附加信息的情况下反序列化抽象类型:当您有带有字段的 JSON

"myGeneric" : { "field1" : 1, "field2" : 2}

您不知道 myGeneric 对象的类是什么。

因此您有两个选择:使用 @JsonTypeInfo 注释或创建自定义反序列化器。示例:

@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
private T myGeneric ;

之后,序列化的 myGeneric 字段将如下所示:

"myGeneric" : { "field1" : 1, "field2" : 2, "@class" : "com.project.MySubClass"}

反序列化器将使用此信息来实例化正确类型的对象

关于java - 当类中包含泛型时, jackson 序列化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36599299/

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