自定义改造 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);
}
我最近一直在使用 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);
}