一尘不染

如何防止Jackson序列化多态类型的注释属性?

json

我有多态类型,并且可以从JSON反序列化为POJO。实际上,我遵循这里的文档。将POJO序列化为JSON时,我得到了不需要的属性,特别是逻辑类型名称。

import static org.codehaus.jackson.annotate.JsonTypeInfo.*;

@JsonTypeInfo(use=Id.NAME, include=As.PROPERTY, property="type")
@JsonSubTypes({
    @JsonSubTypes.Type(value=Dog.class, name="dog"),
    @JsonSubTypes.Type(value=Cat.class, name="cat")
})    
public class Animal { ... }

public class Dog extends Animal { ... }
public class Cat extends Animal { ... }

当Jackson序列化为JSON时,它提供了我不想公开的类型信息。

{"type":"dog", ... }
{"type":"cat", ... }

我可以以某种方式防止这种情况吗?type反序列化时我只想忽略。


阅读 254

收藏
2020-07-27

共1个答案

一尘不染

一个简单的解决方案是将@JsonTypeInfo@JsonSubTypes配置移至MixIn,然后仅注册MixIn进行反序列化。

mapper.getDeserializationConfig().addMixInAnnotations(MyClass.class, MyMixIn.class)

2020-07-27