如何覆盖Lombok Setter方法

Dea*_*ool 9 java lombok

我使用的龙目岛在我的项目和产生SettersGetters使用@Setters,并@Getters注解POJO类的顶部。我正在尝试重写属性的setter方法,但它不起作用

我想检查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;
    }
}

}
Run Code Online (Sandbox Code Playgroud)

工作方案:

        {
"name":"some",
"age":null
     }

     {
"name":"some",
"age":"null"
     }

    {
"name":"some",
"age":"  "
     }
Run Code Online (Sandbox Code Playgroud)

失败的情况:

    {
"name":"some"
    }
Run Code Online (Sandbox Code Playgroud)

输出:

DefaultModel(name=some, age=null)
Run Code Online (Sandbox Code Playgroud)

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

maa*_*nus 8

您只是遇到了一个我从未见过的错误,或者您正在测试错误。

像这样的注释

@Setter(AccessLevel.NONE) private String age;
Run Code Online (Sandbox Code Playgroud)

在现场一级确实阻止了设置程序的生成。但是考虑到要定义一个setter,您甚至不需要它。显式@Setter也会停止生成。

我刚刚使用Eclipse 4.7.3a和Lombok 1.18.0尝试了您的示例,然后调用了(沼泽)设置器。几年来我一直在使用Lombok,但从未遇到过此类错误。

最可能的问题是您的JSON解串器根本不使用setter。我想,您正在测试类似

DefaultModel defaultModel = deserialize("{\"name\":\"some\"}", DefaultModel.class);
Run Code Online (Sandbox Code Playgroud)

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