问题描述:
配置RedisTemplate
的setValueSerializer
为Jackson2JsonRedisSerializer
类型总是报下面的错误, 应该是存储的时候, 自动多加了额外的字段,导致解析的时候没法还原session
对象。 如果使用JdkSerializationRedisSerializer
序列化方式就可以。
这个问题应该怎么处理呢?
Could not read JSON: Unrecognized field "valid"
(class org.apache.shiro.session.mgt.SimpleSession), not marked as ignorable (9 known properties: "attributeKeys", "timeout", "startTimestamp", "expired", "lastAccessTime", "host", "id", "stopTimestamp", "attributes"]) at [Source: (byte[])"{"@class":"org.apache.shiro.session.mgt.SimpleSession","id":"47079159-610a-4eb9-95f4-73e4b366521b","startTimestamp":["java.util.Date",1554862402286],"stopTimestamp":null,"lastAccessTime":["java.util.Date",1554862402286],"timeout":1800000,"expired":false,"host":"0:0:0:0:0:0:0:1","attributes":null,"valid":true,"attributeKeys":["java.util.Collections$EmptySet",[]]}"; line: 1, column: 310] (through reference chain: org.apache.shiro.session.mgt.SimpleSession["valid"]); nested exception is com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "valid" (class org.apache.shiro.session.mgt.SimpleSession), not marked as ignorable (9 known properties: "attributeKeys", "timeout", "startTimestamp", "expired", "lastAccessTime", "host", "id", "stopTimestamp", "attributes"]) at [Source: (byte[])"{"@class":"org.apache.shiro.session.mgt.SimpleSession","id":"47079159-610a-4eb9-95f4-73e4b366521b","startTimestamp":["java.util.Date",1554862402286],"stopTimestamp":null,"lastAccessTime":["java.util.Date",1554862402286],"timeout":1800000,"expired":false,"host":"0:0:0:0:0:0:0:1","attributes":null,"valid":true,"attributeKeys":["java.util.Collections$EmptySet",[]]}"; line: 1, column: 310] (through reference chain: org.apache.shiro.session.mgt.SimpleSession["valid"])
配置类:
@Configuration
public class RedisConfiguration {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
System.out.println(getClass() + " config redis...");
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
template.setKeySerializer(stringRedisSerializer);
template.setHashKeySerializer(stringRedisSerializer);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
//template.setValueSerializer(new JdkSerializationRedisSerializer());
//template.setHashValueSerializer(new JdkSerializationRedisSerializer());
template.afterPropertiesSet();
return template;
}
参考:
https://stackoverflow.com/que...
希望对你有帮助