【问题标题】:JSon Serialization of a final class into Redis using Jackson ObjectMapper and spring-session使用 Jackson ObjectMapper 和 spring-session 将最终类的 JSON 序列化到 Redis
【发布时间】:2016-02-10 21:44:11
【问题描述】:

我即将使用 spring-session 将 HttpSessions 写入 Redis。我基本上是将地图放入会话中,然后将其写入 Redis。

我正在使用 org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer 作为 Serializer,它正在设置 Jackson ObjectMapper: mapper.enableDefaultTyping(DefaultTyping.NON_FINAL, As.PROPERTY); 但正如设置已经说明的那样,它不适用于任何最终结果 (http://wiki.fasterxml.com/JacksonPolymorphicDeserialization)。

我发现在我使用的 CMS (HippoCMS) 的某处,FreemarkerServlet 已初始化,包括以下代码:

void initializeSessionAndInstallModel(HttpServletRequest request,
            HttpServletResponse response, HttpSessionHashModel sessionModel, 
            HttpSession session)
            throws ServletException, IOException
    {
        session.setAttribute(ATTR_SESSION_MODEL, sessionModel);
        initializeSession(request, response);
    }

不幸的是,HttpSessionHashModel 是一个最终类,并被写入会话中。序列化器只写某事。像 {"empty":true} 到 Redis 中,这使得 Deserializer 无法反序列化 JSON,因为没有将 @class 属性写入 JSon。

如何告诉 ObjectMapper 为最终类添加 @class 属性。如果不可能,我的问题可能有什么解决方案?

【问题讨论】:

    标签: java spring jackson freemarker spring-session


    【解决方案1】:

    我希望我能理解您要正确执行的操作。如果是这样,Mix-In 注释可以解决您的问题。看看here.
    您基本上在接口上定义 Jackson 注释并设置 ObjectMapper 的序列化/反序列化以考虑特定类型的接口。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2020-07-09
      • 2017-07-21
      • 2010-11-22
      • 2019-08-21
      • 2020-03-17
      • 2016-11-26
      • 2018-07-24
      • 1970-01-01
      • 2011-10-13
      相关资源
      最近更新 更多