我有以下代码用于调用 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"
}
}
我必须将此响应映射到一个通用对象 ResponseBeanOutput,其中包含 UserBeanOutput 类型的字段(数据)(映射 json 对象中的对象“数据”)。所以最终 ResponseBeanOutput 将映射字段“error”、“message”、“errorCode”,数据将是一个包含“uid”、“email”、“nick”等的“UserBeanOutput”类型的对象。
我的问题是所有对象都是空的(null)并且我没有错误。
我还尝试从 ResponseBeanOutput 中删除泛型类型,并使用带有相关 getter 和 setter 字段的简单 bean 映射响应,其中包含“error”和“message”字段,但没有成功。
我做错了什么?
最佳答案
我按照@Yevhenii Semenov的建议解决了问题,调试execute()方法。我发现问题出在 API 中,它没有在响应中返回正文,因此反序列化为空。 初始化客户端的代码很好。
谢谢
关于java - 改造:使用 Jackson 反序列化失败,没有任何错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47061749/