【发布时间】: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