Wil*_*ler 8 java spring json jackson
我有一个Web服务,它返回一个列表作为JSON.它使用Jackson将Java POJO列表映射到JSON.问题是JSON表示在数组周围有一个包装器对象,我只想要数组.即,我得到了这个:
{"optionDtoList":[{...}, ..., {...}]}
Run Code Online (Sandbox Code Playgroud)
当我真正想要的是这个:
[{...}, ..., {...}]
Run Code Online (Sandbox Code Playgroud)
我正在直接序列化Java List; 我没有用包装器对象包装List并序列化包装器对象.杰克逊似乎正在添加JavaScript包装器对象.
我假设我可以在POJO上使用一些注释来抑制包装器对象,但我没有看到它.
对解决方案的限制
我想在服务端解决这个问题,而不是剥掉客户端上的包装器.客户端是一个jQuery UI小部件(自动完成小部件,不重要),它需要一个简单的数组,我不想修改小部件本身.
我试过的
@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);
Run Code Online (Sandbox Code Playgroud)
收益:
["one","two","three","four","five"]
Run Code Online (Sandbox Code Playgroud)
这是你期待的行为吗?
我可以看到,当我通过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"));
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我遇到了和你一样的问题.
在方法声明中将@ResponseBody添加到我的列表前面后,问题就解决了.
例如:
public @ResponseBody List<MyObject> getObject
| 归档时间: |
|
| 查看次数: |
10745 次 |
| 最近记录: |