如何覆盖 Lombok Setter 方法
How to override Lombok Setter methods
我在我的项目和生成 Setters
和 Getters
中使用 lombok,在 POJO class 之上使用 @Setters
和 @Getters
注释。我正在尝试覆盖 属性 的 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)
我也将此作为参考 here,但目前运气不佳
要么你遇到了我从未见过的错误,要么你测试错了。
像
这样的注释
@Setter(AccessLevel.NONE) private String age;
在现场级别确实阻止了 setter 的生成。但是鉴于您要定义 setter,您甚至不需要它。明确的 @Setter
也会停止生成。
我刚刚使用 Eclipse 4.7.3a 和 Lombok 1.18.0 尝试了您的示例,并且调用了您的(错误)setter。几年来我一直在使用 Lombok,从未遇到过这样的错误。
最有可能的问题是您的 JSON 反序列化器根本不使用 setters。 我想,您正在测试类似
DefaultModel defaultModel = deserialize("{\"name\":\"some\"}", DefaultModel.class);
而不是直接测试 setter。这就是问题所在。
JSON 反序列化器可能使用 Lombok 生成的构造函数(而非 setter)。
看看这里:
我在我的项目和生成 Setters
和 Getters
中使用 lombok,在 POJO class 之上使用 @Setters
和 @Getters
注释。我正在尝试覆盖 属性 的 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)
我也将此作为参考 here,但目前运气不佳
要么你遇到了我从未见过的错误,要么你测试错了。
像
这样的注释@Setter(AccessLevel.NONE) private String age;
在现场级别确实阻止了 setter 的生成。但是鉴于您要定义 setter,您甚至不需要它。明确的 @Setter
也会停止生成。
我刚刚使用 Eclipse 4.7.3a 和 Lombok 1.18.0 尝试了您的示例,并且调用了您的(错误)setter。几年来我一直在使用 Lombok,从未遇到过这样的错误。
最有可能的问题是您的 JSON 反序列化器根本不使用 setters。 我想,您正在测试类似
DefaultModel defaultModel = deserialize("{\"name\":\"some\"}", DefaultModel.class);
而不是直接测试 setter。这就是问题所在。
JSON 反序列化器可能使用 Lombok 生成的构造函数(而非 setter)。
看看这里: