2

我想将我的WebSession存储在 Redis 中。put 操作没有问题,但是在检索存储的记录时会抛出异常。这是我的示例堆栈跟踪

temporal.ChronoUnit","SECONDS"],["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;
}
4

0 回答 0