getActivity / GsonFactory

Gson 解析容错框架,愿从此再无 Json 解析报错
Apache License 2.0
667 stars 66 forks source link

集合类型和后端不匹配的情况下即使申明了默认值也会直接返回[null]? #10

Closed lifuyuan123 closed 3 years ago

lifuyuan123 commented 3 years ago

集合类型和后端不匹配的情况下即使申明了默认值也会直接返回[null]?

getActivity commented 3 years ago

小伙子,这样的设计有什么问题吗?

lifuyuan123 commented 3 years ago

如果后台返回的类型和客户端定义的类型不匹配,框架就不解析这个字段 类型不匹配,不是应该不解析,并且使用我设定的默认值吗?怎么返null

lifuyuan123 commented 3 years ago

当接收类型是 val images: List?= mutableListOf("1")时,把List类型由字符串换为除布尔值的基本数据类型会报 Expected END_OBJECT but was END_ARRAY at line 1 column 363 path $.data[0].images[1],这个结果有点震惊;把string换为Bean则返回[null]

getActivity commented 3 years ago

小伙子,你可以看一下 Gson 的解析规则,TypeAdapter.read 方法是一定要有返回值的,所以当 Json 解析出现错误的时候,Gson 默认的方式是向上抛异常,而我重写了这块的解析规则,为了不让程序崩溃,我会判断这个类型是不是符合要求的,如果不是就跳过解析并返回 null。

getActivity commented 3 years ago

@lifuyuan123 小伙子,你的想法是对的,但是由于 Gson 框架本身的设计,这个想法无法通过修改 Gson 解析规则来实现,如果要实现只能通过修改 Gson 的源码,但是 GsonFactory 框架并不是直接基于 Gson 源码,所以这个需求照目前的情况来看,是实现不了的。

lifuyuan123 commented 3 years ago

想法确实比较刁钻,也就是现在只能处理String和基本数据类型和服务端类型不匹配时返回设定的默认值,Bean类型和集合只要类型和服务端不匹配就返回null。不过,也能覆盖大多情况下的异常了。

getActivity commented 3 years ago

嗯呢,小伙子,这个也是没有办法的事情,这个 issue 我先关闭了,后续有其他别的问题随时欢迎你再联系我。