【发布时间】:2012-05-19 22:41:17
【问题描述】:
发生了严重的错误。
我有
ArrayList<Integer> activitiesToDelete;
我需要准备要传递给 Spring jdbcTemplate 的对象数组。然而,由于某种原因,ArrayList 中的元素被视为 String,因此在 jdbcTemplate 的执行点中断,抱怨它无法从 String 转换为 int。然后我尝试在循环中进行转换,看看是否有帮助:-\ 而且我显然不能做 Integer.parseInt,因为 IDE 将它正确地视为 Integer。每当我分配 Integer a = activitiesToDelete.get(i);它给了我:
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
同样适用于 int a = ... 怎么可能?
Object [] objectList = new Object [activitiesToDelete.size()];
for (int i = 0; i < activitiesToDelete.size(); i++) {
Integer a = activitiesToDelete.get(i);
logger.info(String.valueOf(activitiesToDelete.get(i)));
objectList[i] = activitiesToDelete.get(i).intValue();
}
jdbcTemplate.update(sql, objectList);
我在这里错过了什么?
更新:罪魁祸首
@RequestMapping(value="/activities/delete", method = RequestMethod.POST) public String deleteActivities(@RequestParam("activityId") ArrayList <Integer> activitiesToDelete)
这是一个与 Spring MVC 相关的 sn-p,它从表单中填充,似乎 Spring 无法向 ArrayList 添加正确的类型。
任何人都想知道,要么使用 int[] 或 HttpServlet 方法(虽然是额外的代码)。
【问题讨论】:
-
反过来——整数是不是字符串。检查一下:activityToDelete 与activityIdsToDelete 不同,它保存的是String,而不是Integer 对象。这只不过是您的一个基本错误,我们都经常这样做。所以没有汗水 - 修复它。
-
您缺少显示如何填充activityToDelete 的代码。
-
它仍然保存字符串。仔细检查你用物体填充它的位置。此 JVM 错误消息很少出错。
-
我想我确实找到了。这发生在我在 cmets 中为控制器处理程序提供的行上。好像Spring Framework添加了String,无法区分ArrayList的类型。这是我第一次尝试使用更复杂的数据结构。它与 int[] 完美配合。有谁知道我可以使用除普通数组之外的数据结构来使用 Spring 捕获表单输入的方式吗?我仍然可以使用 HttpServlet getParameter 或 getAttribute,但使用 spring 会更好。
-
感谢您回复我们并发布您对问题的隔离及其解决方案。您可能还想将其发布为“答案”。 1+
标签: java