采坑: Lombok 的 boolean 序列化問題

問題復現(xiàn)

??今天碰到一個小問題,調用方反饋我們支付回調接口返回的數(shù)據(jù)字段和文檔定義不一致.文檔定義的字段名稱是 isClose,而實際返回字段是 close.
??我趕緊查看源碼,代碼非常簡單,只有Lombok 注解,那問題的源頭肯定是使用Lombok注解導致的了!

  • 源碼
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PayCallBackResponse implements Serializable {

    private static final long serialVersionUID = 4454976958022297251L;

    boolean isClose;
}
  • lombok 生成的set方法
         PayCallBackResponse response = new PayCallBackResponse();
         response.setClose(Boolean.FALSE);

??這樣一看就很明了,都是 Lombok 惹得禍

修復方案

??修復方式非常簡單,將屬性類型修改為 Boolean 包裝類型即可

  • 源碼
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PayCallBackResponse implements Serializable {

    private static final long serialVersionUID = 4454976958022297251L;
 
    Boolean isClose;
}
  • 修復后,lombok 生成的set方法
        PayCallBackResponse response = new PayCallBackResponse();
        response.setIsClose(Boolean.FALSE);
問題原因

??時間關系并沒有查看 Lombok 源碼,但是根據(jù)經驗猜測,是因為 Lombok 遵守 JavaBean 規(guī)范(布爾類型 的字段命名是 isXxx 時,get/set 方法可以省略 is前綴)引起的.Mybatis 源碼中的 JavaBean 解析也有此類問題.

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容