2016-02-10 1 views
1

Я собираюсь использовать весеннюю сессию для написания HttpSessions в Redis. Я в основном помещаю карты в сеанс, которые затем должны быть записаны в Redis.JSon Сериализация финального класса в Redis с использованием Jackson ObjectMapper и весенней сессии

Я использую в org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer как Serializer, который настраивает Джексон 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 является конечным классом и записывается в сессию. Сериализатор записывает только sth. например {"empty":true} в Redis, что делает невозможным десериализацию десериализатора JSON-причины. В JSon записывается атрибут @class.

Как сообщить ObjectMapper добавить атрибут @class для конечного класса. Если это невозможно, что может быть возможным решением моей проблемы?

ответ

0

Надеюсь, я понимаю, что вы пытаетесь сделать правильно. Если это так, аннотации Mix-In могут решить вашу проблему. Посмотрите here.
Вы в основном определяете аннотации Джексона на интерфейсе и настраиваете сериализацию/десериализацию ObjectMapper для рассмотрения этого интерфейса для определенного типа.

Удачи вам!

Смежные вопросы