Skip to content

Is there a way to support GenericJackson2JsonRedisSerializer? #387

Closed
@FalconIA

Description

@FalconIA

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"}}}

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions