問題復現(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 解析也有此類問題.