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