long orgId = (Long)request.getSession().getAttribute("orgId");
我无法将我得到的对象转换request.getSession().getAttribute("orgId")
为长变量
所以我需要将其转换为长。无论如何可以提供帮助。
long orgId = (Long)request.getSession().getAttribute("orgId");
我无法将我得到的对象转换request.getSession().getAttribute("orgId")
为长变量
所以我需要将其转换为长。无论如何可以提供帮助。
这种方式不是最好的方法,它太容易出错(并且您假设 orgId 值作为会话的属性存在并且取消装箱,如果 orgId 为空/不存在,将引发异常)。
final long orgId;
Object sessionValue = request.getSession().getAttribute("orgId");
if(sessionValue != null) {
if(sessionValue instanceof Long)
{
orgId = ((Long)sessionValue).longValue();
}
else if(if(sessionValue instanceof String) {
orgId = Long.parseLong((String)sessionValue);
}
else {
// you can set orgId = 0, throw exception, do custom conversion
}
}
else {
// manage missed value
}
这是执行此操作的常用方法
String strOrgId = (String) request.getSession().getAttribute("orgId");
然后将此值解析为Long
long orgId = Long.parseLong(strOrgId);
这取决于“orgId”属性的类型。如果它真的是长的,你的代码应该可以工作。例如,如果您已将其添加为字符串,则需要使用Long.parseLong将其转换为 long :
long orgId = Long.parseLong((String)request.getSession().getAttribute("orgId"));
这取决于您的“orgId”如何存储在会话属性中,作为 String 实例或 Long 实例。
以下代码有点多余,但适用于两种情况:
Object attribute = request.getSession().getAttribute("orgId");
long orgId = Long.parseLong(String.valueOf(attribute));
我遇到了类似的问题。我在会话中存储了一个 long ,当我想获取属性时,它会根据它们的大小自动反序列化为 Integer OR Long 。这真的很烦人。。
因此,在我的情况下,解决方案是将其转换为字符串,然后将其解析为Long
:
Object orgIdObject = session.getAttribute("orgId");
Long orgId;
// first, make a null check. you'll never know
if (orgIdObject == null) {
// if value is null, set to -1 or throw and error..
orgId = -1L;
} else {
// convert to string, and then parse to long
orgId = Long.valueOf(orgIdObject.toString());
}
这样,Object 是 String、Integer 还是 Long 都没有关系。它适用于所有这些类型。
快乐编码,卡拉施