Я пытаюсь зарегистрировать глобальный сериализатор, используя jackson-smile для hazelcast.
public class GlobalJacksonSmileSerializer implements ByteArraySerializer<Object> {
private final ObjectMapper mapper = new ObjectMapper(new SmileFactory());
public int getTypeId() { return 1; }
public void destroy() { }
@Override
public byte[] write(final Object object) throws IOException {
return mapper.writeValueAsBytes(object);
}
@Override
public Object read(final byte[] bytes) throws IOException {
return mapper.readValue(bytes, Object.class);
}
}
При десериализации объекта, содержащего универсальную коллекцию, например,
public class Foo {
private List<Bar> bars;
}
, происходит сбой:
Caused by: java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to Bar
В соответствии с другими ответами здесь на стеке потока (например, java.lang.ClassCastException: java.util.LinkedHashMap не может быть приведен к com.testing.models.Account ) этоограничение Джексона.
Поскольку это глобальный сериализатор байтового массива, я не могу более конкретно сказать о типах коллекций.Есть ли способ справиться с этим, кроме реализации сериализатора для каждого класса?