当前位置: 首页 > 知识库问答 >
问题:

找不到类型[简单类型,类com.example.app.ReferralApiModel]的(Map)键反序列化器

朱起运
2023-03-14

我正在尝试从我的网站获取JSON数据,并使用REST API 2。但当我运行应用程序时,此错误消息显示:

找不到类型[简单类型,类com.example.app.ReferralApiModel]的(Map)键反序列化器

我正在使用改装库。

这是我的改装电话代码:

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(AppConfig.URL)
                .addConverterFactory(JacksonConverterFactory.create())
                .client(defaultHttpClient)
                .build();

        ReferralsPlaceHolderApi placeHolderApi = retrofit.create(ReferralsPlaceHolderApi.class);

        Call<List<Map<ReferralApiModel, String>>> call = placeHolderApi.getReferrals();

这是我的ReferralsPlaceHolderApi类:

public interface ReferralsPlaceHolderApi {

    @JsonDeserialize(keyAs = ReferralsCustomDeserializer.class)
    @GET(AppConfig.ENDPOINT_REFERRALS)
    Call<List<Map<ReferralApiModel, String>>> getReferrals();
}

这也是我的参考模型课程:

public class ReferralApiModel {
    private String date;
    private String amount;
    private String currency;
    private String status;

    public ReferralApiModel() {}

    public ReferralApiModel(String date, String amount, String currency, String status) {
        this.date = date;
        this.amount = amount;
        this.currency = currency;
        this.status = status;
    }

    public String getDate() {
        return date;
    }

    public String getAmount() {
        return amount;
    }

    public String getCurrency() {
        return currency;
    }

    public String getStatus() {
        return status;
    }
}

这是我试图获取的json数据:

[{\"id\":\"1\",\"refferal_wp_uid\":\"0\",\"campaign\":\"\",\"affiliate_id\":\"5\",\"visit_id\":\"1\",\"description\":\"\",\"source\":\"woo\",\"reference\":\"302\",\"reference_details\":\"68\",\"parent_referral_id\":\"0\",\"child_referral_id\":\"0\",\"amount\":\"1500.00\",\"currency\":\"\د\ج\",\"date\":\"2022-01-31 12:53:29\",\"status\":\"0\",\"payment\":\"0\",\"username\":\"aaa\"}

有人能帮我吗?。

我还发现这个问题可能是一个类映射问题,从下面的答案来看:https://stackoverflow.com/a/16383752/8055951如果是?!,有人能告诉我如何映射ReferralsPlaceHolderApi类吗。

谢谢。

共有1个答案

罗伟兆
2023-03-14

Jackson不能反序列化自定义类作为map键。反序列化映射的关键是ReferralApiModel。为了实现它,您需要编写自己的KeyDeserializer并将其注册到Jackson的类中。你可以在这里或这里看到如何做到这一点。

此外,问题中的json字符串使其看起来似乎不需要反序列化到List中

 类似资料:
  • 下面是我的项目的实体类 这是会话表 这里是用户实体 我正在使用JPARepository在我的mysql数据库中保存训练和会话对象 但每当我保存训练对象或会话对象时 我得到了错误 我谷歌了它,发现我需要序列化和反序列化手动…但我不知道怎么做…请帮帮我..

  • 问题内容: 我有一个具有Map的域对象: 当我序列化对象时,得到以下信息: 该地图的键是一个自定义对象: 因此,我不确定在反序列化对象时如何解决这个问题,我将不断纠正: 有人能帮我可以了解如何解决此问题,如果我 不 能够访问域对象要修改? 问题答案: 默认情况下,Jackson尝试将Java Maps序列化为JSON对象(键/值对),因此Map key对象必须以某种方式序列化为String;并且必

  • 问题内容: 我正在使用jackson库将JSON映射到对象中。我已经简化了问题 很多 ,这是发生了什么: 我正在解析一个空的JSON字符串: 在上,出现以下异常: 当我在类中有 两个 返回a的方法时,就会发生这种情况。删除其中一种方法不会导致异常。 实际上,我对映射器查看方法的事实感到惊讶,它应该设置我指示的字段。 这是怎么回事 问题答案: 我通过将转换为来解决此问题:

  • 我试图从API获取数据。我得到了错误类型列表不是地图的子类型。我是新来的,不明白我在哪里犯了错误。 这是我的回帖功能: 在我的主屏幕中,我使用了一个,如下所示: 如何解决此错误?提前谢谢。

  • 我有一门课是这样的: 但是当我试图序列化它时,我收到一个错误,上面写着“试图序列化java.lang.class:java.lang.字符串。忘记注册一个类型适配器了吗?”。所以我创建了这个适配器: } 并登记如下: 但我还是犯了同样的错误<我做错了什么 适配器的实现看起来正常吗?

  • 我从github获取了代码,但仍然不起作用 生成FutureBuilder时引发了以下类型错误(脏,状态:_FutureBuilderState#a936c):类型“List”不是类型“Map”的子类型 在此列出声明 这是地图