java - Jackson 将对象序列化为字符串

标签 java json serialization spring-boot jackson

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

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

我希望所有者点击像这样出现

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

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

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

谢谢!

最佳答案

我认为您想要的是来自 Jackson 的 @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”字段进行序列化。

您还可以查看本教程:

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

关于java - Jackson 将对象序列化为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43603929/

相关文章:

json - Jackson json反序列化,忽略json中的根元素

c++ - 如何使用 boost 库反序列化和获取成员值

java - 如何遍历不断增长的java列表

java - 是否可以用 int 代替 List

java - apache poi 读取 xlsx 文件很慢

java - 如何将 proto3 消息序列化为数组

java - Java 序列化 Clojure 数据结构的大小

java - 如何确定 AWS Lambda 函数中的当前区域?

javascript - 将带有数字键的 JavaScript 对象转换为数组

python - python 中的 Json 对象到 CSV