5

我的 Web 应用程序中有多种类型的域对象,例如MemberModelPostModelCreditsModel。我在配置的时候发现对象的类型是需要的JacksonJsonRedisSerializer,所以我指定了Object.class。但是在反序列化对象时出现错误。

为了解决这个问题,我有两个选择:

  • 改为使用JdkSerializationRedisSerializer。但是序列化的结果太长了,会消耗 Redis 的大量内存。
  • 为每个域对象配置序列化器,这意味着如果我有 50 个域对象,那么我必须配置 50 个序列化器。但这显然是相当乏味的。

有没有优雅的方法来解决这个问题?谢谢!

4

1 回答 1

5

有一个公开的 PR #145可用。在合并之前,几乎可以实现一种RedisSerializerGenericJackson2JsonRedisSerializer中配置用于ObjectMapper在 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);
于 2015-07-07T18:49:44.333 回答