栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用Jackson重命名JSON序列化中的根密钥

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用Jackson重命名JSON序列化中的根密钥

好吧,默认情况下,杰克逊在尝试确定要为包装值显示的根名称时使用两个注释之一-

@XmlRootElement
@JsonRootName
。它希望此批注位于要序列化的类型上,否则它将使用该类型的简单名称作为根名称。

在您的情况下,您要序列化列表,这就是为什么根名称为’ArrayList’(要序列化的类型的简单名称)的原因。列表中的每个元素都可以是@JsonRootName注释的类型,但列表本身
不是

当您尝试包装的根值是一个集合时,则需要某种方式来定义包装名称:

支架/包装类

您可以创建一个包装器类来保存列表,并带有用于定义所需属性名称的注释( 仅当您不直接控制

ObjectMapper
/
JSON转换过程时,才需要使用此方法
):

class MyInterfaceList {    @JsonProperty("rootname")    private List<MyInterface> list;    public List<MyInterface> getList() {        return list;    }    public void setList(List<MyInterface> list) {        this.list = list;    }}final List<MyInterface> lists = new ArrayList<MyInterface>(4);lists.add(new MyImpl(1L, "test name"));MyInterfaceList listHolder = new MyInterfaceList();listHolder.setList(lists);final String json = mapper.writevalueAsString(listHolder);

对象作家

这是更可取的选择。使用配置的

ObjectWriter
实例生成JSON。我们特别对这种
withRootName
方法感兴趣:

final List<MyInterface> lists = new ArrayList<MyInterface>(4);lists.add(new MyImpl(1L, "test name"));final ObjectWriter writer = mapper.writer().withRootName("rootName");final String json = writer.writevalueAsString(lists);


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/383505.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号