Expected Behavior
OAuth2AccessTokenResponse can be serialized.
Token storing with redis is popular .
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
// use Jackson2JsonRedisSerialize
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = initJacksonSerializer();
// keySerial and valueSerial
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
Current Behavior Now it is a final class.
public final class OAuth2AccessTokenResponse {
// ignore
}
Context
Cause :
Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Unexpected token (START_OBJECT), expected START_ARRAY: need JSON Array to contain As.WRAPPER_ARRAY type information for class java.lang.Object
at [Source: (byte[])"{"accessToken":["org.springframework.security.oauth2.core.OAuth2AccessToken"
When I make ObjectMapper that :
// jackson
ObjectMapper om = new ObjectMapper();
om.activateDefaultTyping(om.getPolymorphicTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL);
Cause :
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to org.springframework.security.oauth2.core.endpoint.OAuth2AccessTokenResponse
Comment From: jgrandja
@NotFound403 This is by design that OAuth2AccessTokenResponse is not meant to be Serializable. However, it's member's OAuth2AccessToken and OAuth2RefreshToken are via the supported OAuth2AccessTokenMixin and OAuth2RefreshTokenMixin.
For further details please see gh-4886, gh-7873 and gh-7889.