如何覆盖龙目岛设置器方法

2022-09-02 10:18:04

我在我的项目和生成中使用龙目岛,并在POJO类之上使用和注释。我正在尝试覆盖属性的 setters 方法,但它不起作用SettersGetters@Setters@Getters

我想检查JSON属性是空还是空,我想在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)

我在这里也遵循这个作为参考,但到目前为止没有运气


答案 1

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

像这样的注释

@Setter(AccessLevel.NONE) private String age;

在场上确实阻止了二传手的生成。但鉴于你正在定义一个二传手,你甚至不需要它。一个明确的也会阻止这一代人。@Setter

我刚刚尝试了使用Eclipse 4.7.3a和Lombok 1.18.0的示例,并且您的(错误)setter被调用。几年来,我一直在使用龙目岛,从未遇到过这样的错误。

最有可能的问题是您的 JSON 反序列化程序根本不使用 setter。我猜,你正在测试类似的东西

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

而不是直接测试设置器。这就是问题所在。


答案 2

JSON反序列化程序可能使用由龙目岛(而不是 setters)生成的构造函数。

看看这里:杰克逊反序列化默认值缺失


推荐