从入口集()上的HashMap和杰克逊的铸造ArrayList中获取的集合有什么区别?

时间:2011-08-24 06:41:42

标签: spring rest collections casting hashmap

我正在开发一个Spring Rest应用程序。我的一个方法是:

@RequestMapping(method = RequestMethod.GET)
public @ResponseBody
Collection<Configuration> getConfigurationInJSON() {
    Collection<Configuration> confList = new ArrayList<Configuration>();
...

我填写我的confList并将其发送给GET请求,它可以工作。但是,当我想将confList保存在HashMap中并在获得它的entrySet后发送它:

@RequestMapping(method = RequestMethod.GET)
public
@ResponseBody
Collection<Configuration> getAllConfigurationsInJSON() {
    return configurationMap.values();
}

它给我406错误,所以这意味着有一个错误。这些集合之间有什么区别以及为什么第二个集合与第一个示例不同?

2 个答案:

答案 0 :(得分:0)

为简单起见,您可以复制values()集合吗?

new ArrayList<Configuration>(configurationMap.values());

只有我想到的是Spring期望可变的集合,但是不太明白为什么。很难说没有调试,请尝试启用org.springframework.web完整日志记录。

答案 1 :(得分:0)

明显的区别是configurationMap.values()Set

您需要检查JSON编组是否期望返回List并且无法封送Set个实例,因为编组将检查返回值的实际类型而不是声明的返回方法的类型,即Collection

顺便说一句,日志中是否有关于此的线索?