Как зарегистрировать конвертеры в редисе данных весной? - PullRequest
0 голосов
/ 01 ноября 2018

В настоящее время я использую spring-data-redis: 2.0.5 с загрузкой Spring: 2.0.5 Я хочу сохранить сущность, которая содержит поле ZoneDateTime. У меня нет проблем при сохранении данных. Но при чтении я получаю следующую ошибку:

Невозможно создать экземпляр java.time.ZonedDateTime (не существует создателей, как конструкция по умолчанию): невозможно десериализовать из значения объекта (без создателя на основе делегатов или свойств)

Для решения этой проблемы я создал конвертеры для записи и чтения следующим образом:

@Component
public class DateToZonedDateTimeConverter implements Converter<Date, ZonedDateTime> {
@Override
public ZonedDateTime convert(Date source) {
    return ZonedDateTime.ofInstant(source.toInstant(), ZoneId.of("UTC"));
 }
}

@Component
public class ZonedDateTimeToDateConverter implements Converter<ZonedDateTime, Date> {
@Override
public Date convert(ZonedDateTime source) {
    return Date.from(source.toInstant());
 }
}

И добавил их в мои конвертеры redis следующим образом:

 @Configuration
 @EnableRedisRepositories
public class RedisDbConfiguration {
 @Bean
public RedisCustomConversions   redisCustomConversions(ZonedDateTimeToDateConverter zonedDateTimeToDateConverter,     DateToZonedDateTimeConverter dateToZonedDateTimeConverter) {
    return new  RedisCustomConversions(Arrays.asList(zonedDateTimeToDateConverter,     dateToZonedDateTimeConverter));
    }

Однако при отладке я не вижу ни одного из этих преобразователей, вызываемых. Как мне дать команду моему redisTemplate вызывать эти конвертеры?

Кроме того, поскольку я сохраняю сложный объект, мне нужно добавить следующие сериализаторы перед выполнением вызова put ().

redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setKeySerializer(new StringRedisSerializer());
...