【发布时间】:2017-10-22 15:50:17
【问题描述】:
我有一个带有嵌套接口的接口模型。 每个接口也主要有 1 个具体的实现类,如:
public interface Book {
String getTitle();
}
public class BookImpl implements Book {
private String title;
@Override
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
现在像这样解析 json:
gson.fromJson(json, Book.class);
由于它不知道实现类而不起作用。
所以我创建了一个自定义反序列化器,例如:
public class BookDeserializer implements JsonDeserializer<Book> {
@Override
public Book deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context) throws JsonParseException {
return context.deserialize(json, BookImpl.class);
}
}
但我对模型中的每个接口都这样做。
这是正确的方法吗?创建如此简单的反序列化器?我觉得应该有更简单的方法。
与 Jackson 一样,我会创建一个自定义 Jackson Module 并注册类型映射,例如:
.addAbstractTypeMapping(Book.class, BookImpl.class)
GSON 也可以吗?
【问题讨论】: