自定义改造 json 解串器

Custom retrofit json deserializer

我最近一直在使用 Retrofit library,到目前为止我很喜欢它。但是,我发现 API returns 响应具有以下结构:

"data": 
{
    "meta": 
    {
        "code": 200
        "data": "data"
    },
    "body": [
        {
            "id": "id",
            "field1": "data",
            "field2": "data"
        },
        {
            "id": "id",
            "field1": "data",
            "field2": "data"
        }]
}

假设我有以下 class:

public class Entity {
    long id;
    String field1;
    String field2;
}

和以下界面:

public interface EntityService {

    @GET("/api/method")
    void getEntities(Callback<List<Entity>> callback);
}

如果我想从响应的 data.body 元素中获取 Entity 对象的列表,使用 Retrofit 的正确方法是什么?我知道我可以在回调中传递 Response 对象并使用 org.json 包或其他东西手动解析它,但是有没有更好的方法?

为什么不直接制作一个 class 来表示您已经完成一半的数据呢?这就是我与其他开发人员在多个应用程序中所做的:

public class Meta {
    String code;
    String data;
}

public class Data {
    Meta meta;
    List<Entity> body;
}

public interface EntityService {
    @GET("/api/method")
    void getEntities(Callback<Data> callback);
}

您的结果中的额外数据似乎可以重新使用。您应该使用像这样的通用 class:

public class Data<E> {

    Meta meta;
    E body;

    public static class Meta {
        int code;
        String data;
    }
}

那么你可以使用

Data<List<Entity>> 

或任何你想要的:

public interface EntityService {

    @GET("/api/method")
    void getEntities(Callback<Data<List<Entity>>> callback);
}