为啥 Retrofit & Gson 返回 LinkedTreeMap 列表而不是我预期的类型?
Posted
技术标签:
【中文标题】为啥 Retrofit & Gson 返回 LinkedTreeMap 列表而不是我预期的类型?【英文标题】:Why does Retrofit & Gson return a List of LinkedTreeMap instead of my expected type?为什么 Retrofit & Gson 返回 LinkedTreeMap 列表而不是我预期的类型? 【发布时间】:2018-04-10 10:33:36 【问题描述】:我正在尝试通过 Retrofit 检索对象列表:
public interface TemplateApi
@GET("/api/templates")
Observable<List<TemplateDto>> getList();
这里是 Dto:
public class TemplateDto
public String id;
public String name;
@Override
public String toString()
return this.name;
我得到的不是预期的列表
List<LinkedTreeMap>
这会导致奇怪的副作用(在我的情况下 toString() 返回的结果不是我所期望的)
【问题讨论】:
【参考方案1】:好的,我发现了 - android 确实没有最平坦的学习曲线...
问题不在于 Retrofit 或 Gson 本身,而在于缩小器(Proguard)。 Proguard 需要在一个名为“proguard-rules.pro”的文件中默认配置。
添加以下行:
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.myproject.dtos.** *;
感谢this answer。
【讨论】:
以上是关于为啥 Retrofit & Gson 返回 LinkedTreeMap 列表而不是我预期的类型?的主要内容,如果未能解决你的问题,请参考以下文章
Retrofit com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept
如何使用Retrofit 2和Gson来模拟JSON响应“密钥”频繁更改的数据