記錄:一句註解實現fastjson自省功能

懶癌晚期,事情過去很久了才終於要記錄。
事情的起因是這樣的:
項目中有若干dto,其中一個父類dto,是基類,若干子類dto,是子類,大概是這個意思(直接在csdn編輯器裏手敲代碼,格式湊合看吧。。):

public class FatherDto implements Serializable {
	private String fatherOne;
	
	private String fatherTwo;

	//序列化id,無參構造方法,get/set方法全部略
}
public class SonDtoOne extends FatherDto{
	private String sonOne;
	//序列化id,無參構造方法,get/set方法全部略
}
public class SonDtoTwo extends FatherDto{
	private String sonTwo;
	//序列化id,無參構造方法,get/set方法全部略
}

然後,有個接口,通過feign去調用某個服務方法,返回的數據類型是List<FatherDto>,而實際上在服務方法實現中向list中加入的元素有可能是父類,也有可能是子類。
問題來了,通過rest調用接口,返回的數據元素裏只有父類FatherDto的字段,子類中的獨有字段全都不見了。
問題就在於,JSON標準是不支持自省的,它不標記類型,你不知道它是什麼類型
項目中用的fastjson,解決方案:在dto實體類上統一加上如下註解:

@JSONType(serialzeFeatures = { SerializerFeature.WriteClassName })

加上這個之後,就可以標註類型了,再調用服務返回的元素,子類字段就都會出現了。
值得一提的是,我上面寫的這些類,成員變量都是基本類型的,如果成員變量是其他對象的引用,個人感覺也應該對變量所屬的類上也加上這個註解,這個我沒有試過。

後來百度了一下,這個叫做“自省功能”,特此記錄一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章