В настоящее время я использую 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());