当前位置: 首页 > 知识库问答 >
问题:

Hazelcast:全局Jackson-Smile字节数组序列化器和泛型

戈念
2023-03-14

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

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

共有1个答案

卫浩瀚
2023-03-14

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

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

 类似资料:
  • 问题内容: 我正在使用JAVA 1.6和Jackson 1.9.9我有一个枚举 我添加了一个@JsonValue,这似乎可以将对象序列化为: 但是当我尝试反序列化时,我得到了 我在这里想念什么? 问题答案: 如果你希望将枚举类与其JSON表示完全脱钩,则@xbakesx指出的序列化器/反序列化器解决方案是一个很好的解决方案。 另外,如果你喜欢一个独立的解决方案,则基于·和·注释的实现会更方便。 因

  • 问题内容: 我有一个json字符串,应该将其反序列化为以下类 我该怎么做?这是通常的方式 但是我怎么提到T代表什么呢? 问题答案: 你需要为使用的每种通用类型创建一个对象,并将其用于反序列化。例如

  • 问题内容: 我正在尝试制作一个使用Jackson来反序列化POJO的类。 看起来像这样… 我对此实施有2个问题。 首先是我将类类型传递给方法,以便对象映射器知道应反序列化的类型。有使用泛型的更好方法吗? 同样在get方法中,我将一个从objectMapper返回的对象强制转换为T。这看起来特别讨厌,因为我必须在此处强制转换T,然后还必须从调用它的方法中强制转换对象类型。 我在该项目中使用了Robo

  • 我用Jackson编写了自己的序列化程序。它接受一个变量或类,并返回任何简单类型的值。 示例:serialize(new MyClass(2.0))将返回一个值为 2.0 的双精度值,其中 MyClass 如下所示: 因此,为了获得正确的值,我需要设置@JsonValue,但是,当我序列化一个没有@JsonValue注释的对象(例如UUID)时,它会返回预期的UUID字符串。 创建我自己的类没有@

  • 我有一个json字符串,我应该将其反序列化为以下类 我怎么做?这是通常的方式 但我怎么说T代表什么呢?

  • 我有以下控制器: 使用以下请求对象: 当帖子通过并查看我得到的对象时,有效负载列表中有LinkedHashMap对象,而不是我的DTO类型的对象。 如何让Spring jackson将JSON转换为我的DTO对象。请记住,我计划对其他对象列表重用包装器响应DTO,这就是我使用通用列表(List)的原因。 这是我正在尝试的JSON。