2015-07-07 10 views
4

В моем веб-приложении есть много типов объектов домена, таких как MemberModel, PostModel, и так далее. Я считаю, что тип объекта необходим при настройке JacksonJsonRedisSerializer, поэтому я указал Object.class. Но при десериализации объектов я получил ошибку.Весенний кеш с Redis с использованием сериализатора Jackson: как бороться с несколькими типами объектов домена

Чтобы обойти эту проблему, у меня есть 2 варианта:

  • Используйте JdkSerializationRedisSerializer вместо этого. Но результат сериализации слишком длинный, поэтому он будет потреблять много памяти в Redis.
  • Настройте сериализатор для каждого объекта domian, что означает, что если у меня есть 50 объектов домена, тогда мне нужно настроить 50 сериализаторов. Но это, очевидно, довольно утомительно.

Есть ли изящный способ решить эту проблему? Благодаря!

ответ

5

Доступен открытый PR #145. До тех пор, пока это не будет объединено, можно в значительной степени реализовать RedisSerializer так, как это делается в GenericJackson2JsonRedisSerializer, конфигурируя использованный ObjectMapper для ввода информации типа inlcude в json.

ObjectMapper mapper = new ObjectMapper(); 
mapper.enableDefaultTyping(DefaultTyping.NON_FINAL, As.PROPERTY); 

byte[] bytes = mapper.writeValueAsBytes(domainObject); 

// using Object.class allows the mapper fall back to the default typing. 
// one could also use a concrete domain type if known to avoid the cast. 
DomainObject target = (DomainObject) mapper.readValue(bytes, Object.class); 
+0

Удивительный! Оно работает! – Neo