首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从包装类Jackson派生确切的类

从包装类Jackson派生确切的类
EN

Stack Overflow用户
提问于 2016-08-01 15:52:27
回答 1查看 72关注 0票数 0

让我们假设我们有以下结构:

代码语言:javascript
运行
复制
class BaseClass {
    ...
    String typeOfSomeClass;
    SomeClassBasedOnType someClassBasedOnType;
}

@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=As.PROPERTY, property="BaseClass.typeOfSomeClass")
@JsonSubTypes({
    @Type(value = SomeClassBasedOnTypeImpl1.class, name="type1"),
    @Type(value = SomeClassBasedOnTypeImpl2.class, name="type2")
})
interface SomeClassBasedOnType {
}
@JsonTypeName("type1")
class SomeClassBasedOnTypeImpl1 implements SomeClassBasedOnType {
    String str1;
}
@JsonTypeName("type2")
class SomeClassBasedOnTypeImpl2 implements SomeClassBasedOnType {
    String str2;
}

有了上面的结构,我想用Jackson存储一个JSON。我需要解析的两个可能的JSON是:

代码语言:javascript
运行
复制
{"typeOfSomeClass":"type1", "someClassBasedOnType": {"str1":"someValue"}}

代码语言:javascript
运行
复制
{"typeOfSomeClass":"type2", "someClassBasedOnType": {"str2":"someValue"}}

下面是我用来反序列化JSON的代码:

代码语言:javascript
运行
复制
BaseClass baseClass = new ObjectMapper().readValue(someJsonAsString, BaseClass.class);

唯一的问题是我不知道如何从“基础”JSON获取类型。语法:...property="BaseClass.typeOfSomeClass"仍然在SomeClassBasedOnType实现类中查找属性。你知道如何指定我需要包装类中的属性吗?

只是为了澄清一下“基础”JSON包含许多键,这些键都是相同的,包括键someClassBasedOnType。但是,键someClassBasedOnType可能包含两个不同的JSON对象(具有不同的键),区分这些对象的方法是基于名为typeOfSomeClass的“基本”JSON中的键的值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-03 16:47:02

以下是我的问题的解决方案,但是JsonTypeInfo.As.EXTERNAL_PROPERTY是从1.9版本开始的:(

Jackson JsonTypeInfo.As.EXTERNAL_PROPERTY doesn't work as expected

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38693577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档