代码之家  ›  专栏  ›  技术社区  ›  Ryuzaki L

如何覆盖lombok setter方法

  •  5
  • Ryuzaki L  · 技术社区  · 6 年前

    我在我的项目和代人中使用lombok Setters Getters 使用 @Setters @Getters pojo类顶部的注释。我试图重写属性的setters方法,但它不起作用

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

    我也以此作为参考 here 但是到目前为止还没有运气

    1 回复  |  直到 6 年前
        1
  •  5
  •   maaartinus    6 年前

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

    像这样的注释

    @Setter(AccessLevel.NONE) private String age;
    

    在字段级别上,确实阻止了生成setter。但是考虑到你定义了一个二传手,你甚至不需要它。一个明确的 @Setter 也阻止了这一代。

    我刚刚尝试了使用Eclipse4.7.3a和Lombok1.18.0的示例,并调用了(Buggy)setter。几年来我一直在使用lombok,从未遇到过这样的错误。

    最可能的问题是,JSON反序列化程序根本不使用setter。 我猜,你在测试

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

    而不是直接测试setter。这就是问题所在。