我正在阅读“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”
我尝试过不同的数据类型,例如Integer
,BigInteger
,Double
,Float
并且错误总是相同的(除了它不是String
)
当我在调试中检查priceParams时,数据类型显示为LinkedMultiValueMap
,目标地图显示为LinkedHashMap
。
我开始怀疑无法使用Map<K,V>
声明矩阵变量,但只能Map<K, List<V>>
以Map<K, List<V>>
形式声明它,但您必须遍历List
中的所有条目,即使只有一个条目存在。
任何帮助肯定会受到赞赏
答案 0 :(得分:0)
如果方法参数类型为
Map
且指定了矩阵变量名,则假设有适当的转换策略,则矩阵变量值将转换为Map
如果方法参数为
Map<String, String>
或MultiValueMap<String, String>
且变量名称未指定 ,则会使用所有矩阵变量填充地图名称和价值观。
因此您需要更新如下(即删除pathVar
)
@MatrixVariable Map<String, String> priceParams
如果您仍然遇到任何问题,请在评论中告知
另请参阅this文章以获取更多信息。
答案 1 :(得分:0)