【问题标题】:With jackson, how to serialize only some property of an ebean object when it is part of another object使用杰克逊,当它是另一个对象的一部分时,如何仅序列化 ebean 对象的某些属性
【发布时间】:2018-08-29 13:00:10
【问题描述】:

我有一个 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 序列化某些 proporties 而不是其他 proporties。我也知道如何将一个对象序列化为仅id,当序列化为另一个对象的一部分时,添加:

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

到我的A 对象。

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

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

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

放入我的 A 对象。

【问题讨论】:

    标签: java json serialization jackson ebean


    【解决方案1】:

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

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

    【讨论】:

    • 哦,这是一个很好的答案。我将按照 SO 的要求等待 15 分钟进行验证,但这确实解决了我的问题!白名单比黑名单更容易(我需要 10 或 12 个属性中的 2 个属性),但这可以完成工作!非常感谢。
    • 仅供参考:似乎尚不支持白名单属性,但将来会支持:github.com/FasterXML/jackson-databind/issues/1296
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 2014-10-10
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    相关资源
    最近更新 更多