【问题标题】:How to convert Session attribute converting to long in java?java - 如何在java中将Session属性转换为long?
【发布时间】:2013-08-09 06:46:01
【问题描述】:
long orgId = (Long)request.getSession().getAttribute("orgId");

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

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

【问题讨论】:

  • long orgId = (Long)(request.getSession().getAttribute("orgId")).longValue();
  • 您确定session#getAttribute("orgId")中存储的数据是Long类型还是String格式?
  • 我能预见的唯一问题是你没有设置orgId 属性,它返回null 所以你的代码失败了。当然,如果您编辑您的问题并发布错误的堆栈跟踪,而不是仅仅说 I am not able to foo the bar,我们可以给您一个正确的答案。

标签: java type-conversion


【解决方案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
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      然后将这个值解析为Long

      long orgId = Long.parseLong(strOrgId);
      

      【讨论】:

      • HttpSession#getAttribute 返回一个Object,因此如果orgId 属性存储为Long,此代码将失败。
      • 这是假设存储的属性是StringHttpSession(本质上)是Map<String, Object>,所以如果属性存储为Long,这将抛出ClassCastException
      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:

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

        快乐编码, 卡拉什

        【讨论】:

          猜你喜欢
          • 2011-12-03
          • 2010-11-21
          • 2022-01-07
          • 1970-01-01
          • 1970-01-01
          • 2015-04-27
          • 2020-11-21
          • 1970-01-01
          • 2011-08-03
          相关资源
          最近更新 更多