繁体   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