Я хочу сохранить объекты в сеансах и сохранить эти сеансы в Redis.Redis использует JdkSerializationRedisSerializer
в качестве сериализатора по умолчанию (внутри RedisOperationsSessionRepository
):
private RedisSerializer<Object> defaultSerializer = new JdkSerializationRedisSerializer();
Чтобы сделать это, я либо
- Реализую
Serializable
во всехобъекты, которые я хотел бы сохранить или - Переопределить сериализатор по умолчанию в Redis.
Без этого я получаю сообщение об ошибке: SerializationFailedException: Failed to serialize object using DefaultSerializer; nested exception is java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type
Как я могу переопределить сериализатор redis? Я не могу найти никаких решений для этого, и приведенное ниже решение, похоже, не работает, так как я не могу ввести один и тот же компонент дважды, он уже введен.
@Bean
public RedisOperationsSessionRepository sessionRepository(RedisTemplate<Object, Object> redisTemplate)
{
RedisOperationsSessionRepository sessionRepository = new RedisOperationsSessionRepository(redisTemplate);
sessionRepository.setDefaultSerializer(new GenericJackson2JsonRedisSerializer());
sessionRepository.setDefaultMaxInactiveInterval(300);
return sessionRepository;
}
Я использую:
compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-redis', version: '2.1.3.RELEASE'
compile group: 'org.springframework.session', name: 'spring-session-data-redis', version: '2.1.4.RELEASE'
compile group: 'org.springframework.data', name: 'spring-data-redis', version: '2.1.5.RELEASE'
compile group: 'io.lettuce', name: 'lettuce-core', version: '5.1.4.RELEASE'