泛型模型类



我正在使用一些Web服务,并且有许多Web服务用于检索信息。由于有许多 Web 服务,因此我创建了一个模型类,以便映射来自 Web 服务的结果。

尽管 Web 服务的响应结构相同,但内容却不同。因此,我创建了一个通用模型来获取如下所示的响应。

public class GenericResponse<T> {
    private List<T> Results;
    private ErrorResponseModel Status;
    public List<T> getResults() {
        return Results;
    }
    public ErrorResponseModel getStatus() {
        return Status;
    }
}

我希望将此结果分配给相关模型,以便我可以使用 getter 访问数据。

List<SomeModelClass> result= webServiceResponse.getResults();

但是使用上述方式,当我尝试访问 getter 时,它会给出下面提到的错误。

java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to...

这样做的正确方法是什么?

注意:有一种方法可以做到这一点,我已经尝试过了,您可以将此响应转换为 Gson,然后使用 相关对象类。这样它就可以工作,但不知道它是否是 良好做法。

你的类的问题是,你总是期望结果是一个列表。你可以做的是将结果更改为private T result,在这种情况下,如果你的结果将是字符串,那么T将是一个字符串,如果结果将是Foos列表,则T将被List<Foo>

编辑

如果结果序列化时遇到问题,则需要为该类型定义JsonDeserializer

     class MyResultDeserializer implements JsonDeserializer<MyResult>() {
       public Id deserialize(JsonElement json, Type type, JsonDeserializationContext context)
           throws JsonParseException {
         return new MyResult(id.getValue());
       }
}

并注册它

GsonBuilder builder = new GsonBuilder()
builder.registerTypeAdapter(MyResult.class, new MyResultDeserializer());

最新更新