Hazelcast:全球Jackson-Smile字节阵列串行器和泛型

时间:2018-11-20 09:03:35

标签: jackson deserialization hazelcast

我正在尝试使用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

根据此处有关stackoverflow的其他答案(例如java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.testing.models.Account),这是杰克逊的限制。

由于这是一个全局字节数组序列化器,所以我不能更具体地说明集合类型。除了为每个类实现序列化程序之外,还有其他方法可以解决此问题吗?

1 个答案:

答案 0 :(得分:0)

请以以下示例为例:https://github.com/gokhanoner/generic-serializer/blob/master/member/src/main/java/test/BBSerializer.java

在序列化对象之前使用StremSerializer并编写类名称。然后在反序列化时,获取类名并将其传递给objectnapper.readValue方法