为了账号安全,请及时绑定邮箱和手机立即绑定

如何覆盖 Lombok Setter 方法

如何覆盖 Lombok Setter 方法

侃侃无极 2021-05-31 13:49:02
我使用的龙目岛在我的项目和产生Setters和Getters使用@Setters,并@Getters注解POJO类的顶部。我正在尝试覆盖属性的 setter 方法,但它不起作用我想检查 JSON 属性是 Empty 还是 Null 我想在 Setter 方法中设置默认值@Setter@Getter@NoArgsConstructor@AllArgsConstructor@Accessors(chain = true)@ToStringpublic 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)我也在这里将其作为参考,但到目前为止还没有运气
查看完整描述

2 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

要么你只是遇到了一个我从未见过的错误,要么你测试错了。

像这样的注释

@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。这就是问题所在。


查看完整回答
反对 回复 2021-06-02
?
largeQ

TA贡献2039条经验 获得超7个赞

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

看看这里: Jackson deserialize default values missing


查看完整回答
反对 回复 2021-06-02
  • 2 回答
  • 0 关注
  • 423 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信