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

时间:2016-05-19 14:03:03

标签: java spring spring-mvc

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

@MatrixVariable(pathVar="price") Map<String, List<String>> priceParams

但是,由于每个密钥只有一个值,我想我会尝试声明:

@MatrixVariable(pathVar="price") Map<String, String> priceParams

当我尝试访问与Map中存储的特定密钥相关联的“值”时(使用iterator.getKey()iterator.getValue(),我会不断获得运行时间ClassCastException错误。

  

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

我尝试过不同的数据类型,例如IntegerBigIntegerDoubleFloat并且错误总是相同的(除了它不是String

当我在调试中检查priceParams时,数据类型显示为LinkedMultiValueMap,目标地图显示为LinkedHashMap

我开始怀疑无法使用Map<K,V>声明矩阵变量,但只能Map<K, List<V>>

Map<K, List<V>>形式声明它,但您必须遍历List中的所有条目,即使只有一个条目存在。

任何帮助肯定会受到赞赏

2 个答案:

答案 0 :(得分:0)

来自documents

  

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

     

如果方法参数为Map<String, String>MultiValueMap<String, String>变量名称​​未指定 ,则会使用所有矩阵变量填充地图名称和价值观。

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

@MatrixVariable Map<String, String> priceParams

如果您仍然遇到任何问题,请在评论中告知

另请参阅this文章以获取更多信息。

答案 1 :(得分:0)

看起来Spring基本代码存在问题。

https://jira.spring.io/browse/SPR-14294

似乎已经修复,将来会发布。