【发布时间】:2018-07-17 19:00:24
【问题描述】:
我在我的项目中使用 lombok,并在 POJO 类之上使用 @Setters 和 @Getters 注释生成 Setters 和 Getters。我正在尝试覆盖属性的 setters 方法,但它不起作用
我想检查 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)
我也将此作为参考here,但到目前为止还没有运气
【问题讨论】:
-
不相关:也许你检查
age是 != null 之前你打电话给isEmpty()... -
也不相关:为什么你的
age属性是String? -
不是那么不相关:
age.equals(null)- 此测试将返回false或抛出NullPointerException(这与 @GhostCat 的评论有关)。 -
@GhostCat Lombok 以未记录的编译器 API 调用的形式施展黑魔法。据我所知,他们在 AST 上工作,但我不知道他们是否会删除现有节点(例如现有的 setter)。
-
无关:您应该使用
@Data而不是使用@Getter和@Setter进行注释。 @Data 是它们的快捷方式,包括@ToString和@EqualsAndHashCode。