Code Monkey home page Code Monkey logo

Comments (19)

getActivity avatar getActivity commented on May 25, 2024

小伙子,那你有没有想过有一种情况,后台有给你返回某个字段,但是这个字段的值是空,不知道你是否思考过有这种情况?

{
    "key": null
}

from gsonfactory.

Lanxiong avatar Lanxiong commented on May 25, 2024

考虑过的 常用的三种 String Object List引用类型
业务层面来说,String的null和“”几乎没有区别,List的null和空集合几乎也没有区别,都是这个字段没有内容。仅有是不是已经初始过的区别 。Object的null和有值还是有区别的,不过默认值一般都给null。 当然可能也有部分场景像你说的null也代表一种意思 使用者完全可以把默认值设置为null 也不冲突。 由于有不同的场景需求,所以觉得这个适配kotlin默认值的功能可以作为一个配置项 可以选择开启 也可以不选择 用原配的Gson就好 Moshi我也用过 安全风险太低了 定义为非空类型 后台万一给个null就崩了 每个都是非空类型 那写起来都是?.?.也不对劲 掘金里面也有不少文章写适配默认值不让null覆盖的 应该也是不少人的需求吧

from gsonfactory.

Lanxiong avatar Lanxiong commented on May 25, 2024

你说的可能还有基本类型的null情况 那开发者定义了非空有默认值,不需要null的情况 必然是默认值已经包含了null的业务场景 非得要null的场景 定义为可空就好了 还是有选择空间的

from gsonfactory.

getActivity avatar getActivity commented on May 25, 2024

考虑过的 常用的三种 String Object List引用类型 业务层面来说,String的null和“”几乎没有区别,List的null和空集合几乎也没有区别,都是这个字段没有内容。仅有是不是已经初始过的区别 。Object的null和有值还是有区别的,不过默认值一般都给null。 当然可能也有部分场景像你说的null也代表一种意思 使用者完全可以把默认值设置为null 也不冲突。 由于有不同的场景需求,所以觉得这个适配kotlin默认值的功能可以作为一个配置项 可以选择开启 也可以不选择 用原配的Gson就好 Moshi我也用过 安全风险太低了 定义为非空类型 后台万一给个null就崩了 每个都是非空类型 那写起来都是?.?.也不对劲 掘金里面也有不少文章写适配默认值不让null覆盖的 应该也是不少人的需求吧

小伙子,劳烦贴一下掘金这块的文章,我看看大伙的需求是什么样的

from gsonfactory.

Lanxiong avatar Lanxiong commented on May 25, 2024

Kotlin 也有json解析问题?

kotlin gson反序列化默认值失效

Gson 和 Kotlin Data Class 的避坑指南

Gson 支持 Kotlin 空安全的一种尝试

这几篇是吐槽默认值失效的

搜 Gson kotlin 这两关键词有不少文章都在讲通过一些方法如何做到默认值有效 但是都会有大量的额外模板代码 不是很实用

from gsonfactory.

getActivity avatar getActivity commented on May 25, 2024

还有小伙子,关于你提供的代码,我有一个疑惑的问题

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.

Lanxiong avatar Lanxiong commented on May 25, 2024

哈哈哈 是的 那段代码是我抄来的 我自己测的时候也发现了 感觉那段代码很奇怪 确实就是不为null时候赋值 一个意思

from gsonfactory.

cxf910714 avatar cxf910714 commented on May 25, 2024

考虑过的 常用的三种 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.

maydaynicko avatar maydaynicko commented on May 25, 2024

+1,现在kotlin应该是主流android开发语言了,data class的默认值支持是很有必要的

from gsonfactory.

BugFactory9527 avatar BugFactory9527 commented on May 25, 2024

0-0 这几天被gson和kotlin搞吐了

from gsonfactory.

GuangNian10000 avatar GuangNian10000 commented on May 25, 2024

现在后端就是php,返回的数据类型杂的要死,同建议适配kotlin默认值

from gsonfactory.

getActivity avatar getActivity commented on May 25, 2024

收到,多谢小伙子们的反馈,我将在近期适配这个问题。

from gsonfactory.

getActivity avatar getActivity commented on May 25, 2024

@Lanxiong @BugFactory9527 @GuangNian10000 @maydaynicko 小伙子们,框架已经在 8.0 版本上面已经处理了该问题,升级一下版本即可。

from gsonfactory.

Tsreadlly avatar Tsreadlly commented on May 25, 2024

轮子哥牛逼

from gsonfactory.

po1xiao avatar po1xiao commented on May 25, 2024

轮子哥牛逼

from gsonfactory.

Lanxiong avatar Lanxiong commented on May 25, 2024

太强了 普天同庆

from gsonfactory.

NBXXF avatar NBXXF commented on May 25, 2024

可以尝试这个,并且10倍速度提升 https://github.com/NBXXF/gson_plugin

from gsonfactory.

NBXXF avatar NBXXF commented on May 25, 2024

【警告:请务必按照 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.

NBXXF avatar NBXXF commented on May 25, 2024

Kotlin 也有json解析问题?

kotlin gson反序列化默认值失效

Gson 和 Kotlin Data Class 的避坑指南

Gson 支持 Kotlin 空安全的一种尝试

这几篇是吐槽默认值失效的

搜 Gson kotlin 这两关键词有不少文章都在讲通过一些方法如何做到默认值有效 但是都会有大量的额外模板代码 不是很实用

可以尝试这个,并且10倍速度提升 https://github.com/NBXXF/gson_plugin

from gsonfactory.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.