You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
a client cannot deserialize json without providing the explicit Either.class class type to the mapper's readValue method. In other words, the serialization mechanism is not including the type information if this is enabled.
A simple example, like so fails:
@TestpublicvoidenabledDefaultTyping()
throwsIOException {
ObjectMappermapper = mapper();
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
Either<String, Integer> right = Either.right(1);
Stringjson = mapper().writer().writeValueAsString(right);
System.out.println(json);
// explicitly use Object.class here to have the mapper utilize// the default typing information included in serializationEither<String, Integer> restored = (Either<String, Integer>) mapper().readValue(json, Object.class);
Assert.assertTrue(restored.isRight());
Assert.assertEquals((long) restored.get(), 1);
}
with
java.lang.ClassCastException: class java.util.ArrayList cannot be cast to class io.vavr.control.Either (java.util.ArrayList is in module java.base of loader 'bootstrap'; io.vavr.control.Either is in unnamed module of loader 'app')
More complicated types can change this message.
The serialized value for the above code is ["right",1] which does not include the type information.
I'm currently working on a fix for this, but wanted to open this issue to bring it up. The context for this is that I'm using the GenericJackson2JsonRedisSerializer from spring-data-redis to serialize results to Redis using the @Cacheable mechanism from Spring. Some of the methods we cache return Either<.,.> and we'd like to be able to cache the results.
The text was updated successfully, but these errors were encountered:
If an object mapper is configured with default typing, for example,
a client cannot deserialize json without providing the explicit
Either.class
class type to the mapper'sreadValue
method. In other words, the serialization mechanism is not including the type information if this is enabled.A simple example, like so fails:
with
More complicated types can change this message.
The serialized value for the above code is
["right",1]
which does not include the type information.I'm currently working on a fix for this, but wanted to open this issue to bring it up. The context for this is that I'm using the
GenericJackson2JsonRedisSerializer
from spring-data-redis to serialize results to Redis using the@Cacheable
mechanism from Spring. Some of the methods we cache returnEither<.,.>
and we'd like to be able to cache the results.The text was updated successfully, but these errors were encountered: