【问题标题】:Retrofit + Gson can not parse simple MapRetrofit + Gson 无法解析简单的 Map
【发布时间】:2020-12-21 10:07:05
【问题描述】:

我有一个 JSON 如下

{
  "1.2.3.4": "domain1.com",
  "1.2.3.5": "domain2.com"
}

还有一个模型

public class DnsLookup {
  @Getter @Setter private Map<String, String> entry;
}

并改造查询界面

  @GET("/dns/")
  Call<DnsLookup> getDns(@QueryMap Map<String, String> params);

当我进行查询时,我在dns 中得到null

    Call<DnsLookup> call = service.getDns(queryMap);
    Response<DnsLookup> response;
    response = call.execute();
    var dns = response.body();

其实原来的JSON是

{
  "1.2.3.4": [
    "domain1.com", "domain1-1.com"
  ],
  "1.2.3.5": [
    "domain2.com"
  ]
}

我已经尝试了以下模型,只得到null。由于以下方法不起作用,我将问题分解为键值对。令我惊讶的是,简单的地图也不起作用。

public class DnsLookup {
  @Getter @Setter private Map<String, List<String>> entry;
}

我犯了一个菜鸟的错误吗?

【问题讨论】:

  • nulldns 中,我的意思是dns.getEntry()null
  • 谢谢@Qiu Zhou 和@Axbor Axrorov。目前,我最终使用了Map&lt;String, String&gt;Map&lt;String, List&lt;String&gt;&gt;。但是,我需要尽可能多地使用模型。也许你知道为什么用户定义的类方法不起作用?我一直在使用 JSON 到 POJO 转换器来处理复杂的 JSON 对象。
  • 如果你必须使用DnsLookup作为响应体,那么返回的JSON应该是{ "entry": { "1.2.3.4": "domain1.com", "1.2.3.5": "domain2.com" }},你看,你的JSON错过了entry作为key,如果返回的JSON不能改变,恐怕你得用地图。

标签: java json gson retrofit2


【解决方案1】:

用途:

@GET("/dns/")
Call<Map<String, List<String>>> getDns(@QueryMap Map<String, String> params);

代替:

@GET("/dns/")
Call<DnsLookup> getDns(@QueryMap Map<String, String> params);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多