当前位置: 首页 > 知识库问答 >
问题:

如何覆盖Lombok Setter方法

尉迟边浩
2023-03-14

我在我的项目中使用lombok,并在POJO类上使用@Setters@Getters注释生成Setters@Getters。我试图重写属性的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)

我也将此作为参考,但到目前为止运气不佳

共有2个答案

衡建中
2023-03-14

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

看看这里:Jackson反序列化缺少的默认值

云浩然
2023-03-14

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

类似于

@Setter(AccessLevel.NONE) private String age;

在字段级别上,确实会停止生成setter。但是考虑到你正在定义一个setter,你甚至不需要它。显式的@Setter也会停止生成。

我刚刚使用Eclipse4.7尝试了您的示例。3a和龙目1.18。0,则会调用您的(buggy)setter。几年来,我一直在使用Lombok,从未遇到过这样的错误。

最可能的问题是您的JSON反序列化器根本不使用setters。我猜,你在测试类似于

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

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

 类似资料:
  • 问题内容: 我使用的龙目岛在我的项目和产生和使用,并注解POJO类的顶部。我正在尝试覆盖属性的setter方法,但是它不起作用 我想检查JSON属性是否为空或空,我想在Setter方法中设置默认值 工作方案: 失败的情况: 输出: 问题答案: 您只是遇到了一个我从未见过的错误,或者您正在测试错误。 像这样的注释 在现场一级确实阻止了设置器的生成。但是考虑到要定义一个setter,您甚至不需要它。显

  • 问题内容: 我试图覆盖Java中的方法。我有一堂课,基本上有2个数据字段和。现在,我想重写方法,以便可以在2个对象之间进行检查。 我的代码如下 但是当我写它给我错误时,因为方法只能比较并且是。 Solution 我按照建议使用运算符,问题解决了。 问题答案: Output: `run: – Subash Adhikari - VS - K false – Subash Adhikari - VS

  • 问题内容: 我需要在我的没有超类的对象中实现一个深层克隆。 处理超类(即Object)引发的检查的最佳方法是什么? 一位同事建议我按以下方式处理: 对于我来说,这似乎是一个不错的解决方案,但我想将其扔给StackOverflow社区,以查看是否有我可以提供的其他见解。谢谢! 问题答案: 您绝对必须使用吗?大多数人都同意是坏的。 Josh Bloch谈设计-复制构造函数与克隆 如果您已经阅读了我书中

  • 问题内容: 我正在尝试Backbone.js,而我正在尝试的事情之一就是调用远程API,因此,据我了解的文档资料,我需要能够覆盖Backbone.sync 。 在文档本身中没有如何执行此操作的示例,并且似乎没有用于Backbone的google组…有人可以指出执行此操作的示例吗? 问题答案: 看看这个带注释的源示例,在该示例中,它们被本地存储替代项覆盖 基本上,Backbone.sync应该是一个

  • 问题内容: 我想为Java中的ArrayList拥有toString()方法的自己的实现。但是,即使我将这样的toString()添加到包含ArrayList的类中,我也无法正常工作。 当我这样调用ArrayList时,我仍然会获得默认表示形式。我想念什么吗? 问题答案: 你应该做类似的事情 并将列表作为参数传递给。您 可以从 技术上扩展(使用匿名类或具体类)并实现自己,但这在这里似乎是不必要的。

  • 问题内容: 我想为 isEmpty 方法添加自定义行为。 当我从 我应该重写序列化方法,因为它是抽象的。 我想按原样保留序列化方法,并仅覆盖isEmpty方法。 问题答案: 为了修改行为但保持默认的序列化,您可以利用 serializer修饰符 。您仍然必须实现自定义序列化程序,但是可以非常干净地利用默认序列化程序。 使用默认的序列化器创建一个自定义序列化器 将变量插入到您的自定义序列化器类中。当