首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hazelcast: Global Jackson-Smile字节数组序列化和泛型

Hazelcast: Global Jackson-Smile字节数组序列化和泛型
EN

Stack Overflow用户
提问于 2018-11-20 17:03:35
回答 1查看 837关注 0票数 1

我正在尝试为hazelcast注册一个使用jackson-smile的全局序列化程序。

代码语言:javascript
复制
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);
    }
}

反序列化包含泛型集合的对象时,例如

代码语言:javascript
复制
public class Foo {
    private List<Bar> bars;
}

它失败了:

代码语言:javascript
复制
Caused by: java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to Bar

根据堆栈溢出(例如java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.testing.models.Account)上的其他答案,这是杰克逊的限制。

因为这是一个全局字节数组序列化程序,所以我不能更详细地说明集合类型。除了为每个类实现一个序列化程序之外,还有其他方法来处理这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2018-11-20 22:56:47

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53389495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档