我试着做一些像https://github.com/brharrington/jackson-databind/blob/master/src/test/java/com/fasterxml/jackson/databind/ser/TestGenericTypes.java#L10这样的事情,但有点扭曲。如何序列化和反序列化这样的对象图?
public class Envelope {
// more fields here
// CRUX IS HERE; I can't type it as List<BaseMessage<>> unfortunately
public List<BaseMessage<Object>> payload;
}
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "n"
)
@JsonSubTypes({
@JsonSubTypes.Type(value = AMessage.class, name = "a"),
@JsonSubTypes.Type(value = BMessage.class, name = "b"),
})
public abstract class BaseMessage<TData> {
// discriminator field getters and setters (no abstract field in Java)
public abstract String getN();
public abstract void setN(String n);
// more props
public TData ps;
public SpanContext s;
}
public class AMessage extends BaseMessage<MessageData> {
public String n = "a";
@Override
public String getN() {
return n;
}
@Override
public void setN(String n) {
this.n = n;
}
}
public class MessageData {
public String example;
// more props
}
public class BMessage extends BaseMessage<MessageData> {
public String n = "b";
@Override
public String getN() {
return n;
}
@Override
public void setN(String n) {
this.n = n;
}
}
如果我能以某种方式使用annotations
List<JsonValue>
,然后通过手动读取判别器字段n
,然后用实际类型调用杰克逊,然后显式地调用杰克逊,我会感到最高兴。
发布于 2022-09-12 12:45:57
从一开始,上面的代码是正确的;您必须使用运行时反射来检查<Object>
的类型。
https://stackoverflow.com/questions/73627195
复制相似问题