如何覆盖 Lombok Setter 方法

我使用的龙目岛在我的项目和产生Setters和Getters使用@Setters,并@Getters注解POJO类的顶部。我正在尝试覆盖属性的 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)

我也在这里将其作为参考,但到目前为止还没有运气


侃侃无极
浏览 424回答 2
2回答

胡子哥哥

要么你只是遇到了一个我从未见过的错误,要么你测试错了。像这样的注释@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。这就是问题所在。

largeQ

JSON 反序列化器可能使用 Lombok 生成的构造函数(不是 setter)。看看这里: Jackson deserialize default values missing
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java