覆盖对象的空检查,以便使用JsonInclude.Include.NON_EMPTY

q3qa4bjr  于 2022-10-04  发布在  Spring
关注(0)|答案(1)|浏览(132)

我已经跟踪了两个对象

@JsonInclude(JsonInclude.Include.NON_EMPTY)
@Data
Class Alpha{

  String a;
  String b;
  String c;
}

@JsonInclude(JsonInclude.Include.NON_EMPTY)
@Data
Class Gamma{

  String xxx;
  Alpha alpha;
  String yyy;
}

现在,如果Gamma是我的API响应,其示例化如下所示。

Gamma gamma = new Gamma();
gamma.setXxx("val1");
gamma.setYyy("val2");
gamma.setAlpha(new Alpha()); // For this example all values in alpha are null

在本例中,API客户端收到以下响应

{
  "xxx": "val1",
  "yyy": "val2",
  "alpha":{}
}

这里的空“Alpha”属性就是问题所在。

理想的解决方案IDELL方式是,如果Alpha对象的所有属性都为空,则不初始化该对象。

但对于这个问题,我过度简化了我的应用程序逻辑。
我有一些后端代码,在某些情况下可以有一个空的Alpha对象。

我的问题是

对于Alpha类型的对象,当JsonInclude.Include.NON_EMPTY存在时,我如何重写Jackson检查该对象的非空的行为

比如覆盖/注解某个isEmpty()方法。但只适用于特定的班级。

hgb9j2n6

hgb9j2n61#

这对我很管用

@JsonInclude(JsonInclude.Include.NON_EMPTY)
@Data
Class Gamma{

  String xxx;
  @JsonInclude(value = JsonInclude.Include.CUSTOM, valueFilter = Alpha.class)
  Alpha alpha;
  String yyy;
}

相关问题