//接口
public interface NotificationPayload {
}
public ClassA implements NotificationPayload {...}
public ClassB implements NotificationPayload {...}
...
public ClassX implements NotificationPayload {...}
public class Notification<T extends NotificationPayload> {
private T data; //T may be ClassA/ClassB/ClassC.../ClassX
...
}
{
"type":"ClassA",
"userId":10087
}
Notification notif = objectMapper.readValue(json, Notification.class);
java.lang.IllegalArgumentException: Can not construct instance of
com.common.kafka.notification.NotificationPayload: abstract types
either need to be mapped to concrete types, have custom deserializer, or
contain additional type information
at [Source: N/A; line: -1, column: -1] (through reference chain:
com.common.kafka.notification.Notification["data"])
我从这个问题中读到:不能构造-Jackson的实例,但似乎没有帮助,因为我有太多的类从接口实现,不仅仅是一次。
您需要使用Jackson的注释来实现多态反序列化。
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = ClassA.class, name = "ClassA"),
@JsonSubTypes.Type(value = ClassB.class, name = "ClassB")
})
public interface NotificationPayload {
}
public class ClassA implements NotificationPayload {
private Integer userId;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
}
public class Notification <T extends NotificationPayload> {
private T data; //T may be ClassA/ClassB/ClassC.../ClassX
@JsonCreator
public Notification(T data) {
this.data = data;
}
public static void main(String[] args) throws IOException {
String jsonStr = "{\"type\":\"ClassB\",\"userId\":10087}";
ObjectMapper objectMapper = new ObjectMapper();
Notification notification = objectMapper.readValue(jsonStr, Notification.class);
}
}
您可以在这里找到的所有注释
问题内容: 我有一个需要使用Jackson从JSON反序列化的类。类结构如下所示: 反序列化对象通常效果很好;除了,它与错误代码互操作,当列表为空时,错误代码发出错误的值。也就是说,不是发出: 它发出: 杰克逊遇到以下情况时会抛出此异常: 当然,所有这些都是有道理的。输入错误。 但是,这种情况下的空列表与任何代码都不相关;如果是的话,null我不在乎。null如果无法反序列化该属性,是否有任何方法
问题内容: 我正在尝试使用Jackson将json数据转换为POJO对象。这是MainActivity和我的POJO类代码。我基本上收到了JsonMappingException错误。我还附上了整个日志。 MainActivity.java: Entries.java(这是POJO) 现在,我的日志中出现以下错误。因此,我无法继续工作。这是日志: 问题答案: 在 条目* 和 电话中 删除构造函数
附注: 问题在于我无法在json中自动解析,因为我遇到了另一个异常--我需要将解析为特殊的字符串格式。所以我需要完全使用我的方式-objectMapper(Gson().ToString错误地序列化了我的值)。
问题内容: 我的IDE给我该行的错误 我试着抓住,但是并没有使错误消失。有什么想法吗? 问题答案: 扩展了,所以您的IDE本身就有了更深的麻烦-也许库导入被搞砸了?
我正在使用Jackson,我遇到了问题,当我尝试反序列化一个对象时,我得到了以下错误: 我在属性上有问题: 有人能帮我吗?