1. 程式人生 > >Jackson註解 @JsonTypeInfo 解決多型反序列化問題

Jackson註解 @JsonTypeInfo 解決多型反序列化問題

@JsonTypeInfo 主要是用來解決反序列化時,多型的問題。

@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS,include = JsonTypeInfo.As.PROPERTY,property = "@Clazz")
//@JsonSubTypes({@JsonSubTypes.Type(value = Lion.class,name = "lion"),@JsonSubTypes.Type(value = Tiger.class,name = "tiger")})
public abstract class Animal {
..

use: 在序列化時標誌出不同的型別用什麼區分,用在反序列化時轉換成響應的型別

include:包含型別元資料的一種機制

property:自定義的區分型別的id,預設是@Class

@JsonSubTypes: 可以用來表明這個父類的子型別有哪些。

這個註解可以直接放在類上,也可以放在某個屬性上:


    @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS,include = JsonTypeInfo.As.PROPERTY,property = "@Clazz")
    public List<Animal> animals;

核心樣例程式碼:

 @Test
    public void testJson5() throws Exception{
        Zoo zoo = new Zoo();
        Lion lion = new Lion();
        lion.setName("獅子");
        lion.setAge(2);

        Tiger tiger = new Tiger();
        tiger.setName("老虎");
        tiger.setAge(3);
        List<Animal> animals = new ArrayList<>();
        animals.add(lion);
        animals.add(tiger);
        zoo.setAnimals(animals);
        zoo.setCity("北京");
        zoo.setName("北京天上地下動物園");

        String s = mapper.writeValueAsString(zoo);
        System.out.println(s);
        //{"name":"北京天上地下動物園","city":"北京","animals":[{"@Clazz":"com.xhx.json.entity2.Lion","name":"獅子","age":2},{"@Clazz":"com.xhx.json.entity2.Tiger","name":"老虎","age":3}]}

        Zoo zoo1 = mapper.readValue(s, Zoo.class);
        System.out.println(zoo1);
        //
[email protected]
}

如果不指定@JsonTypeInfo反序列化會報錯

相關推薦

Jackson註解 @JsonTypeInfo 解決序列問題

@JsonTypeInfo 主要是用來解決反序列化時,多型的問題。 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS,include = JsonTypeInfo.As.PROPERTY,property = "@Clazz") //@Js

jackson-- JsonTypeInfo序列

ont 序列 ade opera 反序列化 json images ima 2-2 簡單處理辦法:   JsonTypeInfo的註解使用: 略(自行百度即可)   處理下面這種json的處理辦法:     {"header":{"operationName":"opnam

為啥你用@JsonFormat註解時,LocalDateTime會序列失敗?

## 寫在前面 > 最近,有個小夥伴問我:我在SpringBoot專案中,使用@JsonFormat註解標註LocalDateTime型別的欄位時,LocalDateTime反序列化失敗,這個我該怎麼處理呢?別急,我們一起來解決這個問題。 ## 小夥伴的疑問 ![](https://img-blo

使用Springboot @TypeDiscriminator註解實現物件的查詢,jackson @JsonTypeInfo註解實現controller支援

背景: 最近專案中涉及到要實現繼承物件的獲取,由於習慣用註解實現mybatis物件對映,所以也想用@TypeDiscriminator實現。但是在百度中卻搜尋不到@TypeDiscriminator的應用例項,幸好能上國外網,Google之。下面以一個最簡單的例子來講@TypeDiscrimin

jackson 序列複雜泛物件

最近在使用Redis 快取資料的時候使用的spring 的aop自動從快取中去區json資料。發現方法的返回值帶有泛型時,直接簡單的呼叫使用下面的方法無法拿到正確的結果。 Method method = ((MethodSignature) pjp.getSignature(

C# Json序列 數據協定類 無法序列 由於未找到必需的數據成員

val object test 信息 span 屬性表 ble details space 背景今天在使用:C# Json 序列化與反序列化 反序列化的時候出現了以下的錯誤信息。System.Runtime.Serialization.SerializationExce

jackson實現序列序列解析

效率 出現 span jsonp cor 作用 pat 阿裏 控制 現在項目開發過程中,字符串的傳遞成為前後端交互的主要方式,主要是因為字符串不會出現亂碼等問題,傳送方式是字節碼傳遞,效率比實體較安全。 常見的Json類庫有Gson、JSON

小白審計JACKSON序列漏洞

ces serialize 簡單 mage 簡單介紹 rac led 代碼審計 ble 1. JACKSON漏洞解析 poc代碼:main.java import com.fasterxml.jackson.databind.ObjectMapper; import co

unserialize序列錯誤的解決辦法

replace 序列 lac pre col 反序 blog 解決辦法 repl 1. UTF-8編碼解決反序列化出錯問題 function mb_unserialize($serial_str) { $serial_str = str_replace("\r",

python3 中的Json序列序列 和 字符編碼的問題解決

ron bsp port imp 入參 oos elf asc 反序列化 python3在通過Json往文件裏寫內容時中文字符被轉成unicode編碼 import json class file_open(object): f = open(‘c

SpringMVC註解@initbinder解決轉換問題

解析器 map 數據 apt tag tom omd -s XML 在使用SpringMVC的時候,經常會遇到表單中的日期字符串和JavaBean的Date類型的轉換,而SpringMVC默認不支持這個格式的轉換,所以需要手動配置,自定義數據的綁定才能解決這個問題。在需要日

php 序列返回false解決方法

反序 blog $2 序列化 nbsp post 序列 php replace function mb_unserialize($serial_str) { $serial_str= preg_replace(‘!s:(\d+):"(.*?)";

jackson中自定義處理序列序列

public turn ali fast col ast mar 繼承 con http://jackyrong.iteye.com/blog/2005323 ********************************************** 對於一直用gson的

springboot~Money類序列時遇到的問題與解決

nco 問題 代碼 1.2 第三方 sdn rdquo eip service 在java擴展包裏,有這樣一個包,它可以描述貨幣類型,它說幣種和金額組成,可以應用在任何復雜的場合裏,這個對象結構如下: { "price": { "amoun

JSON 序列序列(-)泛 及 java.lang.reflect.Type

限定 完成 ica 所有 void 數據類型 HR ble DC Type及其子接口的來歷 泛型出現之前的類型 沒有泛型的時候,只有原始類型。此時,所有的原始類型都通過字節碼文件類Class類進行抽象。Class類的一個具體對象就代表一個指定的原始類型。 泛型出現之後的類型

json層陣列的序列

                繼上篇《json陣列的反序列化》 引言     &

叉樹序列序列

import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.uti

記一次使用Jackson對Java物件序列序列的踩坑經歷

背景大概是這樣,專案中的兩個服務A和B依賴了同一個common包的Java類,A對該類json序列化,而B對其反序列化。在一次common包升級過程中,這個Java類中增加了一個屬性,由於B其實用不到這個屬性,就只把A給升級打包了,這就導致B在反序列化時出現了一個異常:com.fasterxml.j

spring+redis 實現快取 解決序列序列的問題

1.config.properties # Redis settings redis.host=127.0.0.1 redis.port=6379   #redis.pass=password redis.dbIndex=0   redis.expiration=3000 &

序列序列,執行緒與執行緒。

一、序列化 屬性類 public class FlyPig implements Serializable { private static String age = "269"; private S