Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring entryset()上HashMap的casted与Jackson的casted ArrayList的集合有什么区别?_Spring_Rest_Collections_Casting_Hashmap - Fatal编程技术网

Spring entryset()上HashMap的casted与Jackson的casted ArrayList的集合有什么区别?

Spring entryset()上HashMap的casted与Jackson的casted ArrayList的集合有什么区别?,spring,rest,collections,casting,hashmap,Spring,Rest,Collections,Casting,Hashmap,我正在开发一个SpringREST应用程序。我的方法之一是: @RequestMapping(method = RequestMethod.GET) public @ResponseBody Collection<Configuration> getConfigurationInJSON() { Collection<Configuration> confList = new ArrayList<Configuration>(); ... @Requ

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

@RequestMapping(method = RequestMethod.GET)
public @ResponseBody
Collection<Configuration> getConfigurationInJSON() {
    Collection<Configuration> confList = new ArrayList<Configuration>();
...
@RequestMapping(method=RequestMethod.GET)
公共@ResponseBody
集合getConfigurationInJSON(){
集合冲突列表=新的ArrayList();
...
我填写我的冲突列表并将其发送给GET请求,它是有效的。但是,当我想将该冲突列表保存在HashMap中,并在获取它的入口集后发送它时,如下所示:

@RequestMapping(method = RequestMethod.GET)
public
@ResponseBody
Collection<Configuration> getAllConfigurationsInJSON() {
    return configurationMap.values();
}
@RequestMapping(method=RequestMethod.GET)
平民的
@应答器
集合getAllConfigurationsInJSON(){
返回configurationMap.values();
}

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

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

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

我想到的唯一一件事是Spring需要可变的集合,但并不真正理解为什么。如果不进行调试,很难说,请尝试启用
org.springframework.web
完整日志记录。

明显的区别是
configurationMap.values()
是一个
集合

您需要检查JSON封送器是否希望返回
列表
,并且无法封送
集合
实例,因为封送器将检查返回值的实际类型,而不是方法的声明返回类型,即
集合


顺便问一下,日志中没有关于这一点的任何线索吗?

您的解决方案可以工作,谢谢。但是使用new运算符会复制内存中的值,是否有使用强制转换或类似方法的解决方案,因为我不想将所有值复制到另一个变量?@kamaci:这不会复制值,它只会复制re当我尝试返回列表时,它是有效的(并且将方法签名更改为集合也是有效的)。然而,当我将其转换为集合时,在服务器端它不会给出任何错误,但在客户端它会给出“406不可接受”错误。正如我所说,返回类型对于
@ResponseBody
注释的方法并不重要,因为它将使用能够处理实际运行时类型的
HttpMessageConverter
。如果您使用的是Jackson,则返回类型将是
映射Jacksonhttpmessageconverter
可以读取()
这个类中的方法如下:
返回这个.objectMapper.canDeserialize(javaType)和&canRead(mediaType)
关于问题标题,你的代码中没有任何类型转换,所以有点误导。@Costi Ciudatu编辑了标题