jackson使用@JsonDeserialize与@JsonSerialize控制序列化与反序列化使用的实际类型

    科技2022-07-10  149

    1.简介

     

    默认情况下,序列化时会获取对象的实际类型,然后根据可见性规则,获取对象以及其父类的所有属性进行序列化

    默认情况下,反序列化时,如果使用的对象类型、属性类型不是最终类型,而是接口或者抽象类型,如Map接口等,此时jackson会

    选择一种常用的实现类来进行反序列化,如Map->HashMap,List->ArrayList,Set->HashSet等

    如果在序列化时只想序列化对象某父级类型的属性,反序列化时希望指定接口或者抽象类型的实现类,jackson提供了以下注解:

    JsonDeserialize:通过as属性控制反序列化后最终的实现类 JsonSerialize:通过as属性控制序列化时使用的实际父类

     

    2.JsonDeserialize

     

    2.1 实体

     

    import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import lombok.Data; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; import java.util.concurrent.ConcurrentHashMap; @Data public class User { private Integer id; /* 指定反序列化使用的实际类型 */ @JsonDeserialize(as = TreeMap.class) private Map<String,String> info1;
    Processed: 0.062, SQL: 8