public class Test {
@JsonSubTypes({ @JsonSubTypes.Type(value = ConcreteA.class)})
interface A {
}
@JsonTypeInfo( use=JsonTypeInfo.Id.CLASS)
class ConcreteA implements A {
}
@JsonSubTypes({ @JsonSubTypes.Type(value = ConcreteB.class)})
interface B {
}
@JsonTypeInfo( use=JsonTypeInfo.Id.CLASS)
class ConcreteB implements B {
A a;
public A getA() {
return a=new ConcreteA();
}
}
@org.junit.Test
public void testSerialisation() throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
System.out.println(objectMapper.writeValueAsString(new ConcreteB()));
}
}
{"@class":"Test$ConcreteB","a":{}}
请注意,它不包括字段'a'的类型信息。在序列化一个。时,确实包含了类型信息。
{"@class":"Test$ConcreteA"}
更新:以下是jackson dev对此问题的解释和解决方案https://github.com/fasterxml/jackson-databind/issues/1015
看起来你已经很接近了,你需要添加的只是告诉jackson如何处理你的接口类型的方法。
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "@class")
@JsonSubTypes({
@JsonSubTypes.Type(value = ConcreteA.class)})
interface A {
}
因此,将@jsontypeinfo
添加到接口中,将在可以配置为预期属性的属性中添加类型信息,在本例中,我选择了@class
。
我从示例中得到的Json输出:
{“@class”:“com.company.jackson.test$concreteb”,“a”:{“@type”:“test$concretea”}}
希望能有所帮助,
我得到了以下几门课: 现在,当我序列化包装在中的时,JSON不包含包含类型ID的属性。虫子?当我序列化到或只序列化到时,它可以正常工作。 编辑:我用一个简单的Spring REST控制器和两个测试制作了一个SSCCE。第一个测试是直接使用,虽然缺少,但它在反序列化中是成功的。第二个测试调用REST控制器并失败,出现错误,因为缺少: 提取类型[class com.example.demo.mySub
我有一个简单的枚举,我想序列化和反序列化。该类如下所示: 问题是,我通过restful调用发送它,接收方可以接收任何类型(因此它只知道它将接收对象)。所以Jackson应该能够找出反序列化它的参数类型。 有可能这样做吗?我认为在生成的json中包含类名应该可以让Jackson判断出类型,但我一直无法做到这一点。
序列化和反序列化的方式不同于 我已经创建了两个序列化程序 和 我用Jackson查看了序列化/反序列化映射 ,但找不到解决方案。
映射器: 要序列化的类: 我不懂这个领域: 从Jackson那里找到的?我用日志检查了我的本地地图,结果发现这个字段不存在,但在序列化过程中它出现了。
问题内容: 我正在尝试做一些在gson中非常容易的事情。由于我改用Jackson作为序列化程序,所以我不知道如何实现此目的: 我只想序列化已由注释标记的字段。GSON代码为: 这应该导致(JSON) (语法错误可能会被忽略-来源仅用于演示) 那么,杰克逊(Gson’s)和杰克逊(Json)的对应对象是什么? 问题答案: 似乎有一种方法可以配置为忽略所有非注释字段。 资源
我希望获得以下输出:(我所要做的就是删除字段名,但保留其子字段名。) 以下是我的POJO,由使用: 下面是MAP在搜索过程中使用的我的: null 是否有一种方法可以使它与和一起使用,因为我不能同时使用这两种方法。 有人能帮忙解决这个问题吗?请指导我适当的文档或变通方法,非常感谢。
我目前正在努力反序列化JSON数据结构,如下所示: 示例1: 示例 2: 我必须处理许多此类结构的实例。它是规则生成器的输出。我无法更改JSON的格式,我必须使用我得到的东西。该结构是递归的,可以有多个级别。 我正在使用Jackson的ObjectMapper并构建一些内部类来映射数据。 大多数实例看起来像示例1,对于那些已经很好地工作的实例,但是有一些更复杂的实例,比如示例2,实际上比示例2更复
我有这样一门课: 我知道基于typeToClassId的对象obj是什么类型,不幸的是只有在运行时才知道。 我想基于typeToClassId解析出obj——这里最好的方法是什么?注释似乎已经过时了,基于ObjectMapper的东西似乎是对的,但我很难弄清楚最好的方法可能是什么。 类似于类clazz=lookUpClassBasedOnId(typeToClassId)objectMapper的