java - 改造:使用 Jackson 反序列化失败,没有任何错误

标签 java android json jackson retrofit

我有以下代码用于调用 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/

相关文章:

尝试下载源代码时 Android repo init 失败

java - 进一步排序一个已经排序的列表

java - 将图像转换为二维数组仅获取左上象限

android - 禁用与其他应用程序/系统相关的日志 - android

java - 根据对象将对象转换为 JSONObject 或 JSONArray 的方法

java - 将 JSON 文件解析为 Java 对象

json - 如何在通用函数中解码 json

java - 如何下载java Sphinx4包

java - 小程序。 session 过期

java - 使用 recyclerview "No Adapter Attached"设置适配器时即将到来