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

标签 java json jackson

我有多态类型和从 JSON 到 POJO 的反序列化工作。我遵循了文档 here , 实际上。将 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

最佳答案

我花了很长时间才解决,所以我想分享一下。

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY,
visible = false, property = "type")

visible=false 确保如果属性 type 存在于类中,则在反序列化期间不会使用 type 的值填充它.

include = JsonTypeInfo.As.EXISTING_PROPERTY 指示如果属性 type 存在,则在序列化期间使用该值,否则什么也不做。

所以把它们放在一起:

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

@JsonTypeInfo(use = Id.NAME, include = As.EXISTING_PROPERTY, visible = false, 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 { ... }

关于java - 如何防止 Jackson 序列化多态类型的注释属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5826928/

相关文章:

javascript - 基于 Drop Downs 循环遍历嵌套 JSON 对象

php - 使用 file_get_contents 将数据从 Swift 传递到 PHP for JSON?

java - Jackson:使用类方法序列化 POJO

java - 基于字段值的 Jackson 属性顺序

java - 使用 Jackson 将消息从 JSON 反序列化为 POJO

java - 从外部文件中提取值时获取 "No line found"

java - tomcat 6 自定义属性资源

Python 解析 JSON 数组

java - 如何在抽屉导航中制作部分 - Android

java - 循环中的 Switch 语句重复次数未知