杰克逊将对象序列化为字符串
Posted
技术标签:
【中文标题】杰克逊将对象序列化为字符串【英文标题】:Jackson Serializing Object as String 【发布时间】:2017-09-22 01:40:46 【问题描述】:所以我有一个看起来像这样的 Item 类(不包括额外的东西):
"id": 1,
"item": "something",
"account":
"id": 5,
"name": "somename"
我希望所有者点击显示为例如这样
"id": 1,
"item": "something",
"account": "somename"
我知道如何通过更改在 Jackson 中序列化 Item 的方式来做到这一点,但是如果我要更改序列化 Item 的方式,我将不得不包括它具有的所有额外字段,并且 Item 也是一个基类,所以我还必须对所有子类做一些事情,这是太多的工作(或者是不是,不知道是否有人有一个简单的解决方案如何仅序列化一个字段并包括所有其他字段)。所以我的问题是我可以序列化 Account 类并让它返回一个简单的字符串(不是 json 对象或类似的东西)。 我尝试使用 JsonGenerator 使其看起来相似,但到目前为止我最好的方法是:
"id": 1,
"item": "something",
"account": "account":"somename"
谢谢!
【问题讨论】:
分享您的代码,提出任何更改建议 检查这个是否适合你...***.com/questions/43200410/… 【参考方案1】:我想你想要的是来自 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
【讨论】:
【参考方案2】:从头开始,我发现我的错误是我总是从以下内容开始: jsonGenerator.writeStartObject(); 并以: jsonGenerator.writeEndObject(); 它本身使它返回一个对象。我所要做的就是使用 writeString 方法。
【讨论】:
以上是关于杰克逊将对象序列化为字符串的主要内容,如果未能解决你的问题,请参考以下文章