-1
long orgId = (Long)request.getSession().getAttribute("orgId");

我无法将我得到的对象转换request.getSession().getAttribute("orgId") 为长变量

所以我需要将其转换为长。无论如何可以提供帮助。

4

5 回答 5

1

这种方式不是最好的方法,它太容易出错(并且您假设 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
}
于 2013-08-09T07:03:24.550 回答
0

这是执行此操作的常用方法

String strOrgId = (String) request.getSession().getAttribute("orgId");

然后将此值解析为Long

long orgId = Long.parseLong(strOrgId);
于 2013-08-09T06:54:07.510 回答
0

这取决于“orgId”属性的类型。如果它真的是长的,你的代码应该可以工作。例如,如果您已将其添加为字符串,则需要使用Long.parseLong将其转换为 long :

long orgId = Long.parseLong((String)request.getSession().getAttribute("orgId"));

于 2013-08-09T06:53:03.287 回答
0

这取决于您的“orgId”如何存储在会话属性中,作为 String 实例或 Long 实例。

以下代码有点多余,但适用于两种情况:

Object attribute = request.getSession().getAttribute("orgId");
long orgId = Long.parseLong(String.valueOf(attribute));
于 2013-08-09T07:07:56.220 回答
0

我遇到了类似的问题。我在会话中存储了一个 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 都没有关系。它适用于所有这些类型。

快乐编码,卡拉施

于 2019-08-30T05:41:57.763 回答