[英]Using Jackson JSON Deserialize with w/ nested class?
我是使用Jackson和反序列化JSON的新手。 我正在尝试创建一个消息处理器,并具有以下内容:
@JsonDeserialize(builder = TestMessage.TestMessageBuilder.class)
private static class TestMessage {
@Nonnull
private Long timestamp;
@Nonnull
private String regionId;
@Nonnull
private String userId;
@Nonnull
private String action;
@Nonnull
private TestMessageMetadata metadata;
@JsonPOJOBuilder(withPrefix = "")
public static class TestMessageBuilder {}
}
问题是,取决于消息附带的操作类型 ,TestMessageMetadata将需要是几个不同子类集合中的一个。 例如,如果操作为“ stream”,则TestMessageMetadata的类型将为TestMessageStreamMetadata。 TestMessageMetadata的每个子类都具有不同的属性(TestMessageStreamMetadata可能具有4个字段,仅适用于“流”类型的消息,而对于某些其他操作,可能只有1个字段仅适用于该类型的操作,等等。)
处理器只需要具有这一总体消息类,那么处理多种操作类型的方法有哪些? 帮助将不胜感激!
问题是,取决于消息附带的操作类型,TestMessageMetadata将需要是几个不同子类集合中的一个。
似乎您在寻找@JsonTypeInfo
。 @JsonTypeInfo
用于处理多态类型。 它配置了属性值的实际类型可能是多个子类型之一的情况。
以下是一个示例:
class TestMessage {
private String action;
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXTERNAL_POPERTY, propery = "action")
@JsonSubTypes({
@JsonSubTypes.Type(value = TestMessageStreamMetadata.class, name = "stream"),
@JsonSubTypes.Type(value = TestMessageFooMetadata.class, name = "foo")
})
private TestMessageMetadata metadata;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.