繁体   English   中英

使用带有嵌套类的Jackson JSON反序列化吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM