java - 我应该如何使用 Jackson 将包含一个对象的列表类型的对象属性转换为对象类型的属性?
问题描述
我有一个 POJO,如下所示:
public class Foo {
private String name;
private List<Bar> bars;
// getters and setters
}
可能bars
是空引用、包含 0 个元素的列表、包含 1 个元素的列表或包含超过 1 个元素的列表。
该对象的序列化在转换为 JSON 时将如下所示:
{
"name: "foo",
"bars: [{}, {}]
}
在列表包含 1 个元素的情况下,我要求在序列化时将类型“bars
压缩”为单个对象。JSON 表示应如下所示:
{
"name": "foo",
"bars": {}
}
我怎样才能使用杰克逊实现这一目标?
解决方案
经过大量挖掘文档后,我发现了 WRITE_SINGLE_ELEMENT_ARRAYS_UNWRAPPED
重写 SerializationFeature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED 将强制将单元素数组和集合序列化为该单元素并排除数组包装器。
实现非常简单,需要向要序列化的对象添加以下注释:@JsonFormat(with = JsonFormat.Feature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED)
public class Foo {
private String name;
@JsonFormat(with = JsonFormat.Feature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED)
private List<Bar> bars;
// getters and setters
}
将此注释添加到Foo
后,JSON 输出为:
{
"name": "foo",
"bars": {}
}
推荐阅读
- node.js - 有没有办法使用 fs 向 json 对象添加数据
- python - 删除双链表中的每隔一个字符
- azure-devops - Azure Pipelines 维护多个国家/地区/环境
- javascript - 如何使用 JavaScript 防止 textarea 元素上的跨站请求伪造 (CSRF)?
- javascript - 如何在 Firestore 查询中过滤掉某些文档
- python - 数据框:在列上移动值
- mysql - MySQL 通过 rand() 将 order 修改为其他方法
- python - Alt-Tab 组合键关闭我的全屏 tkinter 应用程序
- python - 如何在球体上随机散布点
- sql - 根据SQL中已有的行在表中插入记录