Closed
Description
To free up memory, I try to use GenericJackson2JsonRedisSerializer instead.
@Bean
public RedisTemplate<String, ExpiringSession> sessionRedisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<String, ExpiringSession> template = new RedisTemplate<>();
template.setKeySerializer(template.getStringSerializer());
template.setHashKeySerializer(template.getStringSerializer());
template.setValueSerializer(template.getStringSerializer());
template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
template.setConnectionFactory(connectionFactory);
return template;
}
Then get a exception:
com.fasterxml.jackson.databind.JsonMappingException: Unexpected token (END_OBJECT), expected FIELD_NAME: missing property '@class' that is to contain type id (for class java.lang.Object)
at [Source: [B@5b44b124; line: 1, column: 283]
com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148)
com.fasterxml.jackson.databind.DeserializationContext.wrongTokenException(DeserializationContext.java:946)
com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer._deserializeTypedUsingDefaultImpl(AsPropertyTypeDeserializer.java:149)
com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer.deserializeTypedFromObject(AsPropertyTypeDeserializer.java:101)
com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer.deserializeTypedFromAny(AsPropertyTypeDeserializer.java:165)
com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer$Vanilla.deserializeWithType(UntypedObjectDeserializer.java:554)
com.fasterxml.jackson.databind.deser.impl.TypeWrappedDeserializer.deserialize(TypeWrappedDeserializer.java:42)
com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3736)
com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2819)
org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer.deserialize(GenericJackson2JsonRedisSerializer.java:117)
org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer.deserialize(GenericJackson2JsonRedisSerializer.java:98)
org.springframework.data.redis.core.AbstractOperations.deserializeHashValue(AbstractOperations.java:316)
org.springframework.data.redis.core.AbstractOperations.deserializeHashMap(AbstractOperations.java:277)
org.springframework.data.redis.core.DefaultHashOperations.entries(DefaultHashOperations.java:227)
org.springframework.data.redis.core.DefaultBoundHashOperations.entries(DefaultBoundHashOperations.java:101)
org.springframework.session.data.redis.RedisOperationsSessionRepository.getSession(RedisOperationsSessionRepository.java:233)
org.springframework.session.data.redis.RedisOperationsSessionRepository.getSession(RedisOperationsSessionRepository.java:220)
org.springframework.session.data.redis.RedisOperationsSessionRepository.getSession(RedisOperationsSessionRepository.java:141)
org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.getSession(SessionRepositoryFilter.java:276)
org.jasig.cas.client.authentication.AuthenticationFilter.doFilter(AuthenticationFilter.java:103)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260)
org.jasig.cas.client.session.SingleSignOutFilter.doFilter(SingleSignOutFilter.java:76)
org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:125)
org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:65)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Here is a hash value session example:
{"validFromDate":["java.util.Date",1456392459037],"validUntilDate":null,"attributes":{"@class":"java.util.Collections$EmptyMap"},"principal":{"@class":"org.jasig.cas.client.authentication.AttributePrincipalImpl","name":"cas","attributes":{"@class":"java.util.Collections$EmptyMap"}}}