記一次因lombok升級引起的反序列化失敗的bug

記一次因lombok升級引起的反序列化失敗的bug

問題出現:

更新項目後,發現原來正常的接口報錯,調試發現了報錯信息爲 json反序列化異常

no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?)

字符串轉換對象Area 失敗,該對象上添加了lombok @Builder @Data 註解,使用的轉換方式是 areaProvinceVOS = ObjectMapperFactory.getObjectMapper().readValue(json, valueTypeRef);

問題解決

通過報錯信息發現類上缺少構造函數,於是在Area及其包含的子類上添加註解 @AllArgsConstructor @NoArgsConstructor ,序列化正常

原因解析

更新項目過程中,該接口內的代碼沒有更改過,但是更新了lombok版本,從1.16.22更新到了1.18.8。猜測是1.18 的@Builder 註解沒有無參構造函數,導致反序列化失敗

由於lombok是編譯期起效的,於是查看一下編譯後的字節碼文件,果然是沒有無參構造函數的。有一個全參構造器,但是對於jackson的類型轉換是不適用的

在這裏插入圖片描述

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