如何在具有相同响应但不同映射时解析json

时间:2014-03-01 00:52:02

标签: retrofit

我正在尝试使用Retrofit发送请求并能够使用响应。

该服务返回一个像这样的json

  {
     "code" : 0,
     "msg"  : "User received",
     "data" : {
         "name" : "x",
         "tags" : [ "a", "b", "c" ]
     }
   }

结构(代码,消息和数据)相同但数据内部的内容会有所不同。在此示例中应映射到User类。对于其他调用,它将返回帖子列表等。如果出现错误,则不会有数据组件,而是错误属性。

我虽然可以拥有Response类型的特定子类并提示使用它进行改造。

public class Response {
  int code;
  String msg;
}

public class UserResponse extends Response {
  User data;
}

但是当我在返回时没有数据元素时,程序只会在执行操作时中断。

1 个答案:

答案 0 :(得分:0)

如果代码和msg属性用于调试,则可以实现com.retrofit.converter.Convert;) 例如,我使用Gson将json转换为java类型。我将在fromBody方法中获取子JsonElement“data”作为gson参数(public Object fromBody(TypedInput body,Type type)抛出ConversionException)。

return gson.fromJson(theDataJsonElement, type);

当然,不要忘记将转换器设置为适配器

restAdapter.setConverter(new YourImplementedConverter());