【发布时间】:2019-06-10 23:46:43
【问题描述】:
我正在使用一个框架来执行类Config 的Java Jackson 序列化,其中的字段supplier 是一个抽象接口Supplier<T>。下面的接口是在框架中定义的,所以我不能更改/添加注释。
public interface Supplier<T> {
T get();
}
public interface Calculator {
}
@Data
@NoArgsConstructor
public class Config extends Serializable {
private Supplier<Calculator> supplier;
}
我有Supplier的具体实现:
class MySupplier implements Supplier {
@Override Calculator get() { return ...; }
}
当我将Config 的实例序列化为 JSON 时,供应商字段在没有类信息的情况下被序列化。据我了解,这是因为字段声明是抽象的。因此在反序列化期间,Jackson 不知道如何实例化 supplier 字段。
"config" : {
...
"supplier" : { }
...
}
如何强制我的 Supplier 接口实现将类名信息添加到生成的 JSON 中以允许正确反序列化?我无权访问执行序列化和反序列化的代码,我只能操纵我的Supplier 实现。
【问题讨论】:
-
你可以访问
Jackson的ObjectMapper吗?许多框架允许自定义序列化过程。如果不进行自定义,我不确定您是否可以做很多事情。 -
@MichałZiober 是的,我确实可以访问 ObjectMapper。有没有办法通过这个对象对我的实现进行序列化?
-
你找到解决这个问题的方法了吗?我的回答有帮助吗?
标签: java json serialization jackson