Java Spring@MatrixVariable用于每个键的单个值

Java Spring@MatrixVariable用于每个键的单个值,java,spring,spring-mvc,Java,Spring,Spring Mvc,我正在阅读《SpringMVC,初学者指南》一书。在一节中,它建议使用矩阵变量传递高和低价格。在他们的示例中,声明将字符串列表指定为第二个参数(见下文) @MatrixVariable(pathVar=“price”)映射priceParams 但是,由于每个键只有一个值,我想我会尝试以下声明: @MatrixVariable(pathVar="price") Map<String, String> priceParams @MatrixVariable(pathVar=“pri

我正在阅读《SpringMVC,初学者指南》一书。在一节中,它建议使用矩阵变量传递高和低价格。在他们的示例中,声明将字符串列表指定为第二个参数(见下文)

@MatrixVariable(pathVar=“price”)映射priceParams
但是,由于每个键只有一个值,我想我会尝试以下声明:

@MatrixVariable(pathVar="price") Map<String, String> priceParams
@MatrixVariable(pathVar=“price”)映射priceParams
当我尝试访问与存储在
映射中的特定键相关联的“值”(使用
iterator.getKey()
iterator.getValue()
)时,我不断收到一个运行时
ClassCastException
错误

“请求处理失败;嵌套异常为java.lang.ClassCastException:java.util.LinkedList无法转换为java.lang.String”

我尝试过不同的数据类型,例如
Integer
biginger
Double
Float
,错误总是一样的(除了它不是
字符串

在调试中检查priceParams时,数据类型显示为
LinkedMultiValueMap
,目标映射显示为
LinkedHashMap

我开始怀疑不能使用
Map
声明矩阵变量,而只能使用
Map

Map
表单中声明它是可行的,但是您必须循环查看
列表中的所有条目,即使只有一个条目存在

任何帮助,我们都将不胜感激

如果方法参数类型为
Map
,并且指定了矩阵变量名,则假设有适当的转换策略,则矩阵变量值将转换为
Map

如果方法参数为
Map
MultiValueMap
,且未指定变量名,则使用所有矩阵变量名和值填充该映射

因此,您需要如下更新(即删除
pathVar

@MatrixVariable-Map-priceParams
如果您仍然面临任何问题,请在评论中告知

另请参阅文章以了解更多信息。

来自

如果方法参数类型为
Map
,并且指定了矩阵变量名,则假设有适当的转换策略,则矩阵变量值将转换为
Map

如果方法参数为
Map
MultiValueMap
,且未指定变量名,则使用所有矩阵变量名和值填充该映射

因此,您需要如下更新(即删除
pathVar

@MatrixVariable-Map-priceParams
如果您仍然面临任何问题,请在评论中告知


另请参阅本文以了解更多信息。

似乎Spring基本代码存在问题


似乎已经修复,并将在未来的版本中发布。

似乎Spring基本代码存在问题


似乎已修复,将在未来的版本中发布。

这也不起作用。我尝试使用迭代器从映射中获取值,错误保持不变。映射中的“值”不是简单的字符串。在映射上迭代可以获取类,也可以获取密钥,但当我尝试获取“v”时,代码总是失败映射中的“值”。“值”表示为带有第一个和最后一个条目的链表。我在调试代码时可以看到这一点。getValue方法中的值显示为链表。请发布使用的URI。这也不起作用。我尝试使用迭代器从映射中获取值,错误保持不变。错误为映射中的“值”不是简单的字符串。在映射上迭代我可以得到类,我可以得到键,但是当我尝试从映射中获取“值”时,代码总是失败。“值”表示为带有第一个和最后一个条目的链表。我在调试代码时可以看到这一点。getValue方法中的值显示为链接列表。请发布使用的URI。此问题已在另一篇文章中解决。请参阅此处的解决方案:此问题已在另一篇文章中解决。请参阅此处的解决方案:
@MatrixVariable(pathVar="price") Map<String, String> priceParams
@MatrixVariable Map<String, String> priceParams