Comments (19)
小伙子,那你有没有想过有一种情况,后台有给你返回某个字段,但是这个字段的值是空,不知道你是否思考过有这种情况?
{
"key": null
}
from gsonfactory.
考虑过的 常用的三种 String Object List引用类型
业务层面来说,String的null和“”几乎没有区别,List的null和空集合几乎也没有区别,都是这个字段没有内容。仅有是不是已经初始过的区别 。Object的null和有值还是有区别的,不过默认值一般都给null。 当然可能也有部分场景像你说的null也代表一种意思 使用者完全可以把默认值设置为null 也不冲突。 由于有不同的场景需求,所以觉得这个适配kotlin默认值的功能可以作为一个配置项 可以选择开启 也可以不选择 用原配的Gson就好 Moshi我也用过 安全风险太低了 定义为非空类型 后台万一给个null就崩了 每个都是非空类型 那写起来都是?.?.也不对劲 掘金里面也有不少文章写适配默认值不让null覆盖的 应该也是不少人的需求吧
from gsonfactory.
你说的可能还有基本类型的null情况 那开发者定义了非空有默认值,不需要null的情况 必然是默认值已经包含了null的业务场景 非得要null的场景 定义为可空就好了 还是有选择空间的
from gsonfactory.
考虑过的 常用的三种 String Object List引用类型 业务层面来说,String的null和“”几乎没有区别,List的null和空集合几乎也没有区别,都是这个字段没有内容。仅有是不是已经初始过的区别 。Object的null和有值还是有区别的,不过默认值一般都给null。 当然可能也有部分场景像你说的null也代表一种意思 使用者完全可以把默认值设置为null 也不冲突。 由于有不同的场景需求,所以觉得这个适配kotlin默认值的功能可以作为一个配置项 可以选择开启 也可以不选择 用原配的Gson就好 Moshi我也用过 安全风险太低了 定义为非空类型 后台万一给个null就崩了 每个都是非空类型 那写起来都是?.?.也不对劲 掘金里面也有不少文章写适配默认值不让null覆盖的 应该也是不少人的需求吧
小伙子,劳烦贴一下掘金这块的文章,我看看大伙的需求是什么样的
from gsonfactory.
Gson 和 Kotlin Data Class 的避坑指南
这几篇是吐槽默认值失效的
搜 Gson kotlin 这两关键词有不少文章都在讲通过一些方法如何做到默认值有效 但是都会有大量的额外模板代码 不是很实用
from gsonfactory.
还有小伙子,关于你提供的代码,我有一个疑惑的问题
Object fieldValue = typeAdapter.read(reader);
if (fieldValue != null) {
field.set(value, fieldValue);
} else if (!isPrimitive) {
if (field.get(value) == null) {
field.set(value, null);
}
}
- 下面这段逻辑代码不是废话?
if (field.get(value) == null) {
field.set(value, null);
}
from gsonfactory.
哈哈哈 是的 那段代码是我抄来的 我自己测的时候也发现了 感觉那段代码很奇怪 确实就是不为null时候赋值 一个意思
from gsonfactory.
考虑过的 常用的三种 String Object List引用类型 业务层面来说,String的null和“”几乎没有区别,List的null和空集合几乎也没有区别,都是这个字段没有内容。仅有是不是已经初始过的区别 。Object的null和有值还是有区别的,不过默认值一般都给null。 当然可能也有部分场景像你说的null也代表一种意思 使用者完全可以把默认值设置为null 也不冲突。 由于有不同的场景需求,所以觉得这个适配kotlin默认值的功能可以作为一个配置项 可以选择开启 也可以不选择 用原配的Gson就好 Moshi我也用过 安全风险太低了 定义为非空类型 后台万一给个null就崩了 每个都是非空类型 那写起来都是?.?.也不对劲 掘金里面也有不少文章写适配默认值不让null覆盖的 应该也是不少人的需求吧
小伙子,劳烦贴一下掘金这块的文章,我看看大伙的需求是什么样的
kotlin 默认值确实狠有必要实现的,
最近后台返回数据就是很*,把我自己定义的默认值都给覆盖了,搞得每次用到?.判断:
val isCheck: Boolean = false 返回null
val check: String= "" 返回null
val check: List 返回null
from gsonfactory.
+1,现在kotlin应该是主流android开发语言了,data class的默认值支持是很有必要的
from gsonfactory.
0-0 这几天被gson和kotlin搞吐了
from gsonfactory.
现在后端就是php,返回的数据类型杂的要死,同建议适配kotlin默认值
from gsonfactory.
收到,多谢小伙子们的反馈,我将在近期适配这个问题。
from gsonfactory.
@Lanxiong @BugFactory9527 @GuangNian10000 @maydaynicko 小伙子们,框架已经在 8.0 版本上面已经处理了该问题,升级一下版本即可。
from gsonfactory.
轮子哥牛逼
from gsonfactory.
轮子哥牛逼
from gsonfactory.
太强了 普天同庆
from gsonfactory.
可以尝试这个,并且10倍速度提升 https://github.com/NBXXF/gson_plugin
from gsonfactory.
【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】
建议收集
- issue 是否有人曾提过类似的问题?【必答】 服务端没有返回相应的字段数据 #4 有人提出过类似的疑问
- 框架文档是否有提及到此问题?【必答】:否
- 你觉得框架有什么不足之处?【必答】
框架的容错特性确实很不错 考虑到目前kotlin开发占比很高 而kotlin在定义data class时候给默认值是比较常规的做法 很大一部分人还是通过Gson来配合retrofit 但目前的Gson不完全支持默认值 核心代码:
Object fieldValue = typeAdapter.read(reader); if (fieldValue != null || !isPrimitive) { field.set(value, fieldValue); }当为非基本类型时候 会强制赋值 导致默认值失效 如果可以适配kotlin的默认值情况 能解决 设置了默认值 还是非空类型 还要必须判空的情况
- 你觉得该怎么去完善会比较好?【非必答】
建议:如果强制更改这一段赋值逻辑 可能就不是“原汁原味”的Gson了 改动有点大 不一定大家都能接受 所以在初始化的时候给一个配置 可以开启支持kotlin默认值 可能是比较好的做法 核心代码:
Object fieldValue = typeAdapter.read(reader); if (fieldValue != null) { field.set(value, fieldValue); } else if (!isPrimitive) { if (field.get(value) == null) { field.set(value, null); } }
可以尝试这个,并且10倍速度提升 https://github.com/NBXXF/gson_plugin
from gsonfactory.
Gson 和 Kotlin Data Class 的避坑指南
这几篇是吐槽默认值失效的
搜 Gson kotlin 这两关键词有不少文章都在讲通过一些方法如何做到默认值有效 但是都会有大量的额外模板代码 不是很实用
可以尝试这个,并且10倍速度提升 https://github.com/NBXXF/gson_plugin
from gsonfactory.
Related Issues (20)
- json名字中带特殊符表情比如😁(unicode)的数据是否有容错处理 HOT 1
- json名字中带特殊符表情比如😁(unicode)的数据是否有容错处理 HOT 11
- 容错范围 HOT 2
- 能否通过getDelegateAdapter方法给所有TypeAdapter都套层代理,出错时直接跳到下一个呢 HOT 8
- [疑惑]:关于readme写的为什么gson解析后,kotlin默认值无效的问题不太对 HOT 10
- [Bug]:com.google.gson.internal.ConstructorConstructor$9.construct (ConstructorConstructor.java:262) HOT 3
- [建议]:Gson 框架转义问题 HOT 2
- [疑惑]:<init> argument 4 has type int, got null, HOT 3
- [建议]:兼容类型不匹配的情况 HOT 33
- [建议]:我想去掉这样的警告打印<init> argument 4 has type int, got null HOT 7
- [疑惑]:GsonFactory反序列化数据量大时速度有点慢 HOT 10
- [疑惑]:9.0升级9.2 HOT 2
- [Bug]:9.0升级9.2 HOT 5
- [Bug]:升级到 9.3 直接无法解析 HOT 5
- [Bug]:从 9.0 升级 9.3 出现崩溃 HOT 21
- 9.0升级9.3[Bug]: HOT 1
- [Bug]:解析出现报错 HOT 4
- [疑惑]:为啥fastjson解析的是正常的,本框架解析的不一样 HOT 12
- 8.0版本 jitpack无法引用依赖 HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from gsonfactory.