我有一个以 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(使用前将#替换为@)