序列化-將java對象轉(zhuǎn)換為字節(jié)對象
Serializable實現(xiàn)
dubbo服務(wù)在調(diào)用的時候,傳輸?shù)膶嶓w必須要實現(xiàn)序列化
java.lang.IllegalStateException: Serialized class com.c4tman.mock.provider.dubbo.dto.Person
must implement java.io.Serializable
transient關(guān)鍵字修飾的屬性,會用默認值,不會被序列化。
如果父類實現(xiàn)了Serializable接口,子類沒有實現(xiàn)Serializable接口,那么子類可以正常序列化。
如果子類實現(xiàn)了Serializable接口,而父類沒有實現(xiàn)Serializable接口,那么必須滿足如下條件子類才能正常序列化,
第一:父類必須提供一個公共的無參默認構(gòu)造函數(shù)
使用gson時,沒有無參構(gòu)造也可以
Externalizable實現(xiàn)
需要序列化的對象必須有無參構(gòu)造
需自行實現(xiàn)每個屬性的序列化規(guī)則
靜態(tài)屬性不能被序列化,只會只用默認值
反序列化-將字節(jié)對象轉(zhuǎn)換為java對象
dubbo傳輸實體無無參構(gòu)造方法,也可以調(diào)用成功。
ObjectInputStream也可以成功,見鬼了吧~
一些常用的序列化工具
xml
json
protobuff
avro
lombok
注解在類上
@Data
提供get set equals canEqual hashCode toStrings一個6個方法
@Setter
所有屬性的setter方法
@Getter
所有屬性的getter方法
@ToString
生成toString方法
@Value
提供get equals hashCode toStrings一個4個方法
@
@Log4j
名為log的Log4j對象
@Log4j2
名為log的Log4j2 對象
@Slf4j
名為log的Slf4j 對象
@AllArgsConstructor
提供全參構(gòu)造方法,使用此方法后,默認的構(gòu)造方法(無參構(gòu)造)將不再提供。
@NoArgsConstructor
提供無參構(gòu)造方法。
@EqualsAndHashCode
提供equals canEqual hashCode方法
@Builder
只使用@Builder會自動創(chuàng)建全參構(gòu)造器。默認
而添加上@NoArgsConstructor后就不會自動產(chǎn)生全參構(gòu)造器
反序列化需要DTO實現(xiàn)無參構(gòu)造方法
注解在屬性上
@NonNull
屬性不能為空,且默認有該屬性的構(gòu)造方法,無無參構(gòu)造。
注解在變量上
@CleanUp
調(diào)用變量的close()方法。
注解再方法上
@SneakyThrows(Exception.class)
整個方法拋出異常