定制改造json解串器

时间:2015-05-27 09:44:25

标签: android json retrofit

我最近一直在使用Retrofit library,到目前为止我都喜欢它。但是,我遇到了API,它返回具有以下结构的响应:

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

假设我有以下课程:

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

以及以下界面:

public interface EntityService {

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

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

2 个答案:

答案 0 :(得分:1)

为什么不创建一个代表数据的类,就像你已经完成了一半?这就是我和其他开发人员一起在多个应用程序中所做的事情:

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);
}

答案 1 :(得分:1)

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

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);
}