【发布时间】:2018-04-14 04:15:28
【问题描述】:
我有以下用于调用 Rest-API 的代码:服务
Retrofit client = Client.getClient();
Call<ResponseBeanOutput<UserBeanOutput>> call = client.create(AuthResource.class).login("username","password","true");
Response<ResponseBeanOutput<UserBeanOutput>> response = call.execute();
通过静态方法获取客户端:
public static Retrofit getClient() {
ObjectMapper mapper = new ObjectMapper();
return new Retrofit.Builder()
.baseUrl(getBaseUrl())
.addConverterFactory(JacksonConverterFactory.create(mapper))
.build();
}
服务器以 JSON 格式发送响应,如下所示:
{
"error": false,
"message": "Successfull login",
"errorCode": 0,
"data": {
"uid": 7,
"email": "user@example.com",
"name": "username",
"nick": "usernick",
"photoUrl": "media/profiles/defaultImageProfile.png",
"lts": "aaaaeqc9lf9od82rk633aaaaa"
}
}
我必须将此响应映射到包含 UserBeanOutput 类型的字段(数据)的通用对象 ResponseBeanOutput(映射 json 对象中的对象“数据”)。所以最后 ResponseBeanOutput 将映射字段“error”、“message”、“errorCode”,数据将是“UserBeanOutput”类型的对象,包含“uid”、“email”、“nick”等。
我的问题是所有对象都是空的(null),我没有错误。
我还尝试从 ResponseBeanOutput 中删除泛型类型,并使用带有“错误”和“消息”字段的简单 bean 映射响应,并使用 releted getter 和 setter 但没有任何成功。
我做错了什么?
【问题讨论】:
-
你尝试调试改造吗?在大多数情况下,它对我有用,当我不明白为什么 3-rd 方库不能按我预期的那样工作时。只需在 .execute() 方法的开头下一个断点,一步一步找到原因。
标签: java android json jackson retrofit