前言
前端與後端在進行互動時,前端傳的物件中,有的屬性是int,boolean這些型別,它們是有預設值的,當前端不轉它們時,後端也會接收到預設值,如int為0,boolean為false,這就給後端程式碼帶來不確定性;比如要有個put更新使用者的方法,有個使用者物件如下
@Data
public class UserAccountResponse implements Serializable {
private String id;
private String name;
private boolean isDefault;
}
當前端只put更新name時,如果不傳isDefault,後端接收到的是isDefault=0,這是不對的,會出現資料被覆蓋的問題;基於這個問題我們需要將boolean改成封裝型別Boolean,當前端不傳時,它是為null的;而在lombok中,boolean和Boolean型別生成的 getter和setter方法名是不同的,這導致了返回前端的屬性名不同。
lombok中boolean和Boolean
對於上面的例子,在isDefault被返回前端時,它的名稱分別是
- boolean 返回到前端為 default
- Boolean 返回到前端為 isDefault
為Boolean型別屬性進行適配
使用 @Setter(AccessLevel.NONE)和@Getter(AccessLevel.NONE) 並手動實現 getter 和 setter
@Data
public class UserAccountResponse implements Serializable {
private String id;
private String name;
@Setter(AccessLevel.NONE)
@Getter(AccessLevel.NONE)
private boolean isDefault;
public Boolean getDefault() {
return isDefault; // 自定義 getter 方法
}
public void setDefault(Boolean isDefault) {
this.isDefault = isDefault;
}
}
這樣再返回前端時,就是隻有一個default欄位了,不是與之前boolean產生衝突,當然,如果之前你使用的一直是Boolean就不會有這個問題,本文章只使用於型別從boolean修改為Boolean的情況
{
"code": "200",
"data": [
{
"id": "57345f65bb064a9a95327e35a5034905",
"default": true,
"name": "normal"
}
]
}