使用 Jackson 将 Java 对象序列化为 JSON 时抑制包装器对象

2023-11-23

我有一个以 JSON 形式返回列表的 Web 服务。它使用 Jackson 将 Java POJO 列表映射到 JSON。问题是 JSON 表示在数组周围有一个包装对象,而我只想要该数组。即,我得到这个:

{"optionDtoList":[{...}, ..., {...}]}

当我真正想要的是这样的时候:

[{...}, ..., {...}]

我直接序列化Java List;我没有用包装器对象包装列表并序列化包装器对象。 Jackson 似乎正在添加 JavaScript 包装器对象。

我假设可以在 POJO 上使用一些注释来抑制包装器对象,但我没有看到它。

解决方案的限制

我想在服务端解决这个问题,而不是在客户端剥离包装。客户端是一个 jQuery UI 小部件(自动完成小部件,这并不重要),它需要一个简单的数组,并且我不想修改小部件本身。

我尝试过的

  • 我尝试用 Java POJO 数组替换 Java POJO 列表,结果是相同的。
  • I tried @JsonTypeInfo(use = Id.NONE)认为这可能会抑制包装纸,但事实并非如此。

当我运行时在测试模式下:

org.codehaus.jackson.map.ObjectMapper mapper = new org.codehaus.jackson.map.ObjectMapper();
String json = mapper.writeValueAsString( Arrays.asList("one","two","three","four","five") );
System.out.println(json);

returns:

["one","two","three","four","five"]

这是您期望的行为吗?

我可以看到,当我通过 Spring 控制器返回此列表并让 MappingJacksonJsonView 处理将列表转换为 json 时,是的,它周围有一个包装器,它告诉我 MappingJacksonJsonView 是添加包装器的那个。一种解决方案是从控制器显式返回 json,例如:

    @RequestMapping(value = "/listnowrapper")
public @ResponseBody String listNoWrapper() throws Exception{       
    ObjectMapper mapper = new ObjectMapper();
    return mapper.writeValueAsString(Arrays.asList("one","two","three","four","five")); 
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Jackson 将 Java 对象序列化为 JSON 时抑制包装器对象 的相关文章

随机推荐

  • 奇怪的空指针异常

    我的 NPE 的 Stacktrace 开头是 Caused by java lang NullPointerException at pl yourvision crm web servlets listExport ProductLis
  • Safari MacOS 异物在 svg 内无法正确缩放

    UPDTATE 由于 Apple 是一家价值 2 万亿美元的公司 让我们尝试通过在此处提交错误报告来让他们解决此问题 https www apple com feedback safari html In Chrome and Firefo
  • IntelliJ:将私钥设置为环境变量不起作用(Spring boot项目)

    我有一个 Spring Boot 项目 如果我使用私钥 多行文本 它工作得很好 这意味着密钥没有问题 但是当我尝试将其设置为 intellij 中的环境变量时 它显示 原因 属性 spring cloud config server git
  • 在另一个应用程序中向我自己的 ContentProvider 请求读取权限

    在一个应用程序中 我在 AndroidManifest 中声明了以下内容提供程序
  • 理解 git Cherry-pick

    来自 svn 背景 我几乎从不分支 因为切换速度 缺乏 以及将分支合并回主干需要一个小时或更长时间 有时 如果我需要修复网站上的问题 我会在主干中进行更改 它将与以前的更改或新功能一起存在 然后转到该文件并执行 svn up path to
  • 在 Perl 正则表达式替换中使用 $1 与 \1 有什么区别?

    我正在调试一些代码 想知道 Perl 正则表达式替换中的 1 和 1 之间是否有任何实际差异 例如 my package name Some Package ButNotThis package name s w w 1 print pac
  • 如何修复错误:此服务需要项目 ID,但无法确定

    我正在尝试从 AppEngine 将数据插入 Google 数据存储区 但收到错误 java lang IllegalArgumentException A project ID is required for this service b
  • numpy fromiter 与列表生成器

    import numpy as np def gen c c np ones 5 dtype int j 0 t 10 while j lt t c 0 j yield c tolist j 1 What I did res np arra
  • 使用选择查询更新表

    所以我在这里读了一些帖子 但我似乎无法在 MySQL 上运行它 几乎我有一个带有 itemid 的记录 计数 我想根据 itemid 更新到我的 items 表中 items popularity 这是我尝试过的 Update items
  • Bash 中命令替换的变量赋值的退出代码

    我对明确执行变量赋值并使用命令替换时命令将返回什么错误代码感到困惑 a false echo 它输出1 这让我认为变量赋值不会清除最后一个错误代码或产生新的错误代码 但是当我尝试这个时 false a echo 它输出0 显然这就是a 返回
  • 有人使用 Swing 的“swingx”扩展吗? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 我在这里看到了 swingx 的提及和提及 但是 每次
  • 图像缩小算法

    您能帮我找到正确的图像调整大小算法吗 我有一个数字的图像 最大尺寸为 200x200 我需要获得尺寸为 15x15 甚至更小的图像 图像是单色的 黑白 结果应该是相同的 这就是关于我的任务的信息 我已经尝试过一种算法 这里是 xscale
  • 为什么我不能在动态 SQL 的 DDL/SCL 语句中使用绑定变量?

    我正在尝试使用绑定变量在动态 SQL 中执行 SQL 命令 this procedure is a part of PL SQL package Test Pkg PROCEDURE Set Nls Calendar calendar IN
  • 在android模拟器中使用麦克风(Java + Android初学者)

    我在这里读到在 Android 模拟器中使用麦克风可能是可能的 所以我决定尝试一下 尽管答案这个问题说这是不可能的 我复制 粘贴了中提供的代码Android 开发者网站并添加了
  • Django循环导入错误

    我是 Django 新手 我刚刚在 windows vista 上为 python 2 5 安装了 v 1 3 1 使用 setup py install 当我启动 python shell 并尝试导入 django db 时 出现以下循环
  • 使用 H264 编解码器将视频保存在 opencv 中

    我在用opencv python 4 5 1 48 and python3 9码头工人 我想以 h264 格式保存视频 这是我保存视频的功能 import cv2 def save video frames fps 30 video pat
  • Scala中的类型类模式不考虑继承?

    在某些情况下 我正在使用类型类设计 API 但是我遇到了隐式解析的问题 如下所示 如果有一个类型为A的隐式对象但有一个类型为B extends A传递给该方法 则无法找到隐式对象 有没有办法做到这一点 或者调用者是否必须将隐式对象放入每个子
  • MKMapView MKCircle 渲染半径太大的圆

    我面临着 MKCircle 外观的奇怪行为 基本上我试图画一个半径为 8500 公里 任意中心的圆 这是我的代码 private func addCircle mapView removeOverlays mapView overlays
  • 我需要在Python中生成1000个唯一的名字

    我需要生成 1000 个唯一的名字并将它们存储在列表中 我正在使用 Python faker 但得到了很多重复的值 import random from random import shuffle from faker import Fak
  • 使用 Jackson 将 Java 对象序列化为 JSON 时抑制包装器对象

    我有一个以 JSON 形式返回列表的 Web 服务 它使用 Jackson 将 Java POJO 列表映射到 JSON 问题是 JSON 表示在数组周围有一个包装对象 而我只想要该数组 即 我得到这个 optionDtoList 当我真正