gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:42:36 25 4
gpt4 key购买 nike

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

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

当我真正想要的是:

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

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

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

解决方案的约束

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

我尝试过的

  • 我尝试用 Java POJO 数组替换 Java POJO 列表,结果是一样的。
  • 我尝试了 @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);

返回:

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

您期望的行为是正确的?

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

    @RequestMapping(value = "/listnowrapper")
public @ResponseBody String listNoWrapper() throws Exception{
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(Arrays.asList("one","two","three","four","five"));
}

关于java - 使用 Jackson 将 Java 对象序列化为 JSON 时抑制包装器对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4765570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com