我正在尝试使用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),这是杰克逊的限制。
由于这是一个全局字节数组序列化器,所以我不能更具体地说明集合类型。除了为每个类实现序列化程序之外,还有其他方法可以解决此问题吗?
答案 0 :(得分:0)
在序列化对象之前使用StremSerializer并编写类名称。然后在反序列化时,获取类名并将其传递给objectnapper.readValue方法