杰克逊总是序列化完整的对象或总是只序列化id

时间:2018-05-18 08:19:30

标签: java json jackson

我正在使用注释@JsonIdentityInfo来使用它的id序列化/反序列化对象。

我实现了一个运行良好的ObjectIdResolver。

@JsonIdentityInfo(
  generator = ObjectIdGenerators.PropertyGenerator.class, 
  property = "id", resolver = EntityIdResolver.class, scope = MyClass.class)
public class MyClass{....}

我找到了此注释的文档here

我的问题是声明:“实际上,这是通过将第一个实例序列化为完整对象和对象标识,以及将对象的其他引用序列化为参考值来完成的。”

现在我的Rest-Endpoint返回类似于

的内容
{
"itemList": [
    {
        "id": 70110,
        "myClass": {
            "id": 3,
            "name": "itemName",
            "date": "2000-01-01"
        },
    },
    {
        "id": 70111,
        "myClass": 3,
    }
]
}

但这意味着,客户端必须处理不同的数据类型。客户端确实知道所有对象,因此序列化无论是仅返回id还是完整对象都无关紧要。

如何阻止杰克逊使用此行为?

1 个答案:

答案 0 :(得分:1)

最后很快找到了解决方案(至少对我的问题而言): 添加

@JsonIdentityReference(alwaysAsId = true) 

到MyClass将始终将其视为

"myClass":3

我发现了here