lombok~避免Boolean屬性使用預設的方法

张占岭發表於2024-09-27

前言

前端與後端在進行互動時,前端傳的物件中,有的屬性是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"
        }
    ]
}

相關文章