在Servlet中如何使用getAttribute方法将Object转换为Integer?
Servlet中Object转Integer的正确处理方式
问题分析
第一种写法的错误
代码:
String id = req.getSession().getAttribute("user_id").toString(); int user_id=Integer.parseInt(id);
错误原因:getAttribute("user_id")返回了null,此时调用toString()会触发空指针异常,因为null对象无法调用任何方法。
第二种写法的错误
代码:
String id = (String)req.getSession().getAttribute("user_id"); int user_id=Integer.parseInt(id);
错误原因:session中存储的user_id实际是Integer类型,强行将Integer对象向下转型为String,会触发类型转换异常——Integer和String属于不同类型,无法直接强转。
正确解决方案
方案1:先判空,再根据实际类型转换
如果不确定session中存储的是Integer还是String,先做非空判断,再通过instanceof判断类型后转换:
Object userIdObj = req.getSession().getAttribute("user_id"); int user_id = 0; // 设置默认值,避免空值影响后续逻辑 if (userIdObj != null) { if (userIdObj instanceof Integer) { user_id = (Integer) userIdObj; } else if (userIdObj instanceof String) { user_id = Integer.parseInt((String) userIdObj); } }
方案2:已知存储类型为Integer时的简化写法
如果确定session中存储的user_id是Integer类型,直接判空后转型:
Integer userIdObj = (Integer) req.getSession().getAttribute("user_id"); int user_id = userIdObj != null ? userIdObj : 0;
额外提示
- 存储session属性时,尽量保持类型一致,避免后续转换混乱;
- 处理空值时,一定要先做非null判断,避免空指针异常。
内容的提问来源于stack exchange,提问作者Myron Dsilva
相关产品推荐
相关产品推荐

