我在Spring启动时学习了矩阵变量,但在提取数据时遇到了问题。
@GetMapping(value = "/{query}/plan", produces = {"application/xml"})
public ResponseEntity<List<PlanDTO>> fetchPlansByLocalRate(@MatrixVariable(pathVar = "query") Map<String, List<Integer>> map){
Set<String> keysLocalRates = map.keySet();
Set<Integer> localRates = new HashSet<Integer>();
keysLocalRates.forEach(key -> {
map.get(key).forEach(val -> localRates.add(val)); // throwing exception here
});
return ResponseEntity.status(HttpStatus.OK).body(planService.fetchPlansByLocalRate(localRates));
}
它抛出以下错误
java. lang.ClassCastException:类java.lang.String不能强制转换为类java.lang.Integer(java.lang.String和java.lang.Integer在加载器'bootstrap'的模块java.base中)在java.base/java.util.ArrayList.for每(ArrayList.java:1511)~[na:na]在com.inery.控制器.PlanController.lambda0美元(PlanController.java:51)~[类/:na]在java.base/java.util.LinkedHashMap$LinkedKeySet.for每(LinkedHashMap.java:589)~[na:na]在com.inrey.控制器.PlanController.fetchPlansByLocalrate(PlanController.java:50)~[类/:na]在java.base/jdk.interal.反射.NativeMEodAccessorImp.调用0(本机方法)~[na:na]在java.base/jdk.interal.反射.NativeMEodAccect
我不明白我哪里出错了。
keysLocalRates
是一组字符串。localRates
是一组整数。您正在尝试将String
从keysLocalRates
添加到localRates
。Integer
和String
不是兼容的类型。您需要使用相同的类型或从一种类型转换为另一种类型。我不知道String集是否包含始终是数字的字符串。如果没有,那么您可能希望将String用于两个集合。