例如,我有一个序列化的值,在Redis中以字符串的形式存储,它代表了UserAction对象的列表:
["java.util.ArrayList",[{"@class":"com.domain.UserAction","id":1,"name":"Login"},{"@class":"com.domain.UserAction","id":2,"name":"Logout"}]]
当我试图通过redisTemplate通过它的密钥(例如UserActionsCache
)访问它时:
RedisTemplate<String, UserAction> redisTemplate;
redisTemplate.opsForValue().get(key);
它会抛出如下错误:
org.springframework.data.redis.serializer.SerializationException: Could not read JSON:
Could not resolve type id `com.domain.UserAction` as a subtype of `java.lang.Object`: no such class found
我尝试将redisTemplate
更改为以下版本,但它有相同的问题:
RedisTemplate<String, List<UserAction>> redisTemplate;
RedisTemplate<String, ArrayList<UserAction>> redisTemplate;
RedisTemplate<String, Object> redisTemplate;
如何正确地访问值并将其反序列化为对象列表?
这是我的redisTemplate配置的一部分:
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"
p:connection-factory-ref="jedisConnFactory"
p:keySerializer-ref="stringRedisSerializer"
p:valueSerializer-ref="genericJackson2JsonRedisSerializer"
p:hashKeySerializer-ref="stringRedisSerializer"
p:hashValueSerializer-ref="genericJackson2JsonRedisSerializer"
/>
1条答案
按热度按时间nimxete21#
你好我知道这是老问题,但你可以简单地重构你的redisTemplate
我不知道什么是Spring的等效豆定义,但我离开Spring Boot 。
然后您可以像这样自动连接相关的bean。
RedisTemplate<String, List<UserAction>> redisTemplate
用法:
redisTemplate.opsForValue().get("key");
这一定有用