杰克逊将对象序列化为字符串

时间:2017-04-25 07:10:47

标签: java json serialization spring-boot jackson

所以我有一个看起来像这样的Item类(不包括额外的东西):

{
"id": 1,
"item": "something",
"account": {
    "id": 5,
    "name": "somename"
      }
}

我希望所有者点击例如像这样

{
"id": 1,
"item": "something",
"account": "somename"
}

我知道如何通过改变在Jackson中序列化Item的方式来实现这一点,但是如果我要改变序列化Item的方式,我将必须包含它所有的额外字段,而Item也是一个基类所以我必须对所有子类做一些事情,这是太多的工作(或者是,如果有人有一个简单的解决方案,如何序列化一个字段并包括所有其余部分,不知道)。所以我的问题是我可以序列化Account类并使其返回一个简单的String(不是json对象或类似的东西)。 我尝试过使用JsonGenerator让它看起来很相似,但到目前为止我所做的最好的是:

{
"id": 1,
"item": "something",
"account": {"account":"somename"}
}

谢谢!

2 个答案:

答案 0 :(得分:1)

我认为你想要的是杰克逊的@JsonIdentityInfo。

此注释允许您指定子实体在父实体中的序列化方式。

以下是一个例子:

    @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="productDescription")
@JsonIdentityReference(alwaysAsId=true) // otherwise first ref as POJO, others as id
private Product product;

这告诉Jackson应该使用产品bean" productDescription"来序列化产品bean。字段。

您还可以查看本教程:

http://www.baeldung.com/jackson-annotations

答案 1 :(得分:0)

从头开始,我发现我的错误在于我总是开始: jsonGenerator.writeStartObject(); 结束于: jsonGenerator.writeEndObject(); 它本身使它返回一个对象。我所要做的只是使用writeString方法。