首页 > 解决方案 > 使用杰克逊,当它是另一个对象的一部分时,如何仅序列化 ebean 对象的某些属性

问题描述

我有一个 API 可以调用来获取一些 Json 对象。假设我有两种对象:AB

一个对象在其实例变量中A有一个对象。B当我调用我的 API 来获取someB时,我想要以下结果:

{
  id: 234,
  name: theBName,
  colour: theBColour,
  size: 123
}

但是当我调用我的 API 来获取someA时,我想要以下结果:

{
  id: 456,
  type: someAType,
  b: {
    id: 234,
    name: theBName
  }
}

如您所见,B在第二种情况下,我的对象只有部分属性。

我发现如何使用jsonViews. 我还知道如何将一个对象序列化为仅id在序列化为另一个对象的一部分时添加:

 @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
 @JsonIdentityReference(alwaysAsId = true)
 public B someB;

对我的A对象。

但是对于我的生活,我无法弄清楚如何将这个B对象序列化为它id 我选择的其他属性,当且仅当它被序列化为A对象的一部分时。

我正在寻找类似这样的注释:

@serialiazeUsingOnlyProperties({"property1", "property2"})
public B someB;

放入我的 A 对象。

标签: javajsonserializationjacksonebean

解决方案


您可以使用@JsonIgnoreProperties. 注释通常用于类级别,但也适用于字段。当应用于字段时,它用于忽略带注释的字段内的属性:

@JsonIgnoreProperties({"colour", "size"})
public B someB;

推荐阅读