簡體   English   中英

如何覆蓋 Lombok Setter 方法

[英]How to override Lombok Setter methods

我在我的項目中使用@Setters並在 POJO 類之上使用@Setters@Getters注釋生成SettersGetters 我正在嘗試覆蓋屬性的 setter 方法,但它不起作用

我想檢查 JSON 屬性是 Empty 還是 Null 我想在 Setter 方法中設置默認值

@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@ToString
public class DefaultModel {


private String name;
@Setter(AccessLevel.NONE)private String age;    

public void setAge(String age) {
     if(age==null||age.trim().isEmpty()||age.equals("null")) {
        this.age="10";
    }else {
        this.age=age;
    }
}

}

工作場景:

        {
"name":"some",
"age":null
     }

     {
"name":"some",
"age":"null"
     }

    {
"name":"some",
"age":"  "
     }

失敗場景:

    {
"name":"some"
    }

輸出:

DefaultModel(name=some, age=null)

我也在這里將其作為參考,但到目前為止還沒有運氣

要么你只是遇到了一個我從未見過的錯誤,要么你測試錯了。

像這樣的注釋

@Setter(AccessLevel.NONE) private String age;

在字段級別上確實會阻止生成 setter。 但是鑒於您正在定義一個 setter,您甚至不需要它。 顯式@Setter停止生成。

我剛剛使用 Eclipse 4.7.3a 和 Lombok 1.18.0 嘗試了您的示例,並且您的(有問題的)setter 被調用。 幾年來我一直在使用 Lombok,從未遇到過這樣的錯誤。

最有可能的問題是您的 JSON 反序列化器根本不使用 setter。 我猜,你正在測試類似的東西

DefaultModel defaultModel = deserialize("{\"name\":\"some\"}", DefaultModel.class);

而不是直接測試setter。 這就是問題所在。

JSON 反序列化器可能使用 Lombok 生成的構造函數(不是 setter)。

看看這里: Jackson deserialize default values missing

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM