Исключение Spring WebSession Redis
Я хочу сохранить свою веб-сессию в Redis. Нет проблем с операцией размещения, но она вызывает исключение при получении сохраненной записи. Вот мой пример трассировки стека
Вызвано: com.fasterxml.jackson.databind.exc.MismatchedInputException: неожиданный токен (START_OBJECT), ожидаемый START_ARRAY: требуется, чтобы массив JSON содержал информацию о типе As.WRAPPER_ARRAY для класса java.lang.Object в [Источник: (byte[])"{" атрибуты ":["org.springframework.session.web.server.session.SpringSessionWebSessionStore$SpringSessionMap",{}],"id":"2a5c3d9b-3557-4bd6-bca8-9e221c3a5b41"," {lastAccessTime " "nano":800305900,"epochSecond":1605268779},"creationTime":{"nano":800305900,"epochSecond":1605268779},"expired":false,"maxIdleTime":{"seconds":5400,"nano":0," отрицательный ": ложь," ноль ": ложь," единицы ":["java.util.ImmutableCollections$List12",[["java.time.temporal.ChronoUnit"," СЕКУНДЫ "],["java.time.temporal.ChronoUnit","NANOS"]]]"[усеченные 18 байт]; строка: 1, столбец: 1]
Как я мог решить эту проблему? Я не понимаю, почему это происходит? Благодарю.
Вот мой сеансовый сервис.
@Component
@RequiredArgsConstructor
@Slf4j
public class SessionMappingStorage {
private static final String USR_TO_SESSION___KEY = "USR_SESSION_MAP";
private final ReactiveHashOperations<String, String, Object> hashOps;
public Mono<Boolean> addSession(String username, WebSession session) {
return hashOps.put(USR_TO_SESSION___KEY, username, session);
}
public Mono<WebSession> getSessionByUserId(String username) {
return hashOps.get(USR_TO_SESSION___KEY, username).cast(WebSession.class);
}
}
Вот моя конфигурация Redis.
@Bean
public ReactiveRedisTemplate<String, String> reactiveRedisTemplate() {
RedisSerializer keySerializer, hashKeySerializer, hashValueSerializer;
keySerializer = hashKeySerializer = new StringRedisSerializer();
hashValueSerializer = new GenericJackson2JsonRedisSerializer(objectMapper());
RedisSerializationContext.RedisSerializationContextBuilder<String, String> builder =
RedisSerializationContext.newSerializationContext(keySerializer);
RedisSerializationContext<String, String> context =
builder.hashKey(hashKeySerializer).hashValue(hashValueSerializer).build();
return new ReactiveRedisTemplate<>(reactiveRedisConnectionFactory(), context);
}
@Bean
public ReactiveHashOperations<String, String, Object> hashOps() {
return reactiveRedisTemplate().opsForHash();
}
private ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.enableDefaultTyping();
return mapper;
}