客户端不接收 null, 各位服务端大佬都是怎么优雅处理的?

2024-01-29 16:12:07 +08:00
 laaaaaa

环境

jdk8, springboot;

需求

客户端包括了很多,电视端 手机端 小程序端 web 端;

除了 web 端,好像都不太愿意接收 null ;

例如 java 一个实体类 我返回给他们,某些字段为空的话 也想接收 "",不要 null ;


这一块我想问问大佬们,都是怎么优雅处理的;

不会要每个 bean ,都 private String a = "";

ps

 1. 判断 Null  和 "" 有很大区别吗? 因为什么呢
 2.java 编译过程中,null 要比""占用的资源少吧
5436 次点击
所在节点    程序员
73 条回复
yxisenx
2024-01-29 16:47:41 +08:00
jackson 的话直接在返回实体上面加个
@JsonInclude(JsonInclude.Include.NON_NULL)
potatowish
2024-01-29 16:52:06 +08:00
返回空字符串和 null 在服务端含义是不同的,而客户端是表现层,所以这个差异是体现不出来的,都是没有值。

还有就是代码健壮性的问题,如果客户端处理了 null ,那么即便服务端返回空字符串,客户端也不会有问题。
nicocho
2024-01-29 16:52:22 +08:00
好久没看到优雅这个词了
sanmaozhao
2024-01-29 16:56:01 +08:00
@potatowish
> 返回空字符串和 null 在服务端含义是不同的,而客户端是表现层,所以这个差异是体现不出来的,都是没有值。

这个其实不太对,现在的客户端早就不是简单的渲染表现层了,也是有部分业务逻辑在里面的
所以我上面才觉得,服务端就应该如实地返回 null
XXWHCA
2024-01-29 17:00:35 +08:00
null 不返回就行,他们可能是不喜欢返回没有意义的 null 字段,客户端这种强类型语言开发时不返回的字段引用类型默认值也是 null😂,文档写明白就行了
kalista
2024-01-29 17:24:24 +08:00
go 也不喜欢 null ,甚至数据库定义里面都是 not null 的
Ayanokouji
2024-01-29 17:27:57 +08:00
数据库加默认值,能解决不少问题
yolee599
2024-01-29 17:28:25 +08:00
为啥要返回 null ?没意义啊,如果这个字段没有数据,直接不传这个字段就好了,不用多此一举还浪费网络带宽。
treblex
2024-01-29 17:29:02 +08:00
我最近开始写 getValue(obj,"a.b.c.d") 这样的东西,取到 null 的时候就不会崩溃了🙈
ZeroDu
2024-01-29 17:34:22 +08:00
正确操作是直接不序列化这个字段。别返回空字符,这种才是
wangritian
2024-01-29 17:35:01 +08:00
我是 go 后端,用中间件拦截控制器的输出,然后通过反射递归的把空指针 nil 改成空值
但其实站在团队角度,我更支持客户端应该有健壮性,兼容 null 和空值
就像我从来不设计请求参数不传(null)和传空值有不同含义,应该最大的去兼容
nerkeler
2024-01-29 17:42:12 +08:00
`private String a = ""` 简单粗暴,或者用注解 @JsonIgnore 指定参数(具体忘记是啥了) 不返回 null 的字段 ,怎么简单怎么来呗,或者统一处理请求字段 null 的都给个初始值,不过实现麻烦了点
broken123
2024-01-29 18:13:35 +08:00
你应该想想各个客户端的语言是不一样的 安卓 java kotlin ,flutter dart web js ts , 还有各种小程序 直接给一个默认值就行了
broken123
2024-01-29 18:16:17 +08:00
实际上客户端也只有强制类型语言才会 做 null 判断 js 会 出现 undfi 和 null 这种情况 java 写他妈一大堆非空判断再取是真的很烦心。代码丑陋的一笔。
darkengine
2024-01-29 18:27:46 +08:00
有一天,后端跟我说,前端要判断某个接口返回的复杂结构里字段是不是 null 或者 undefine

我问哪个字段需要判断,他说不是很简单吗,所有字段。。。

卧尼🐎个很简单
zjp
2024-01-29 18:34:38 +08:00
在序列化层做呗,Jackson 的话是单独处理 null 值的,参考 https://stackoverflow.com/a/18123772
JsonInclude.Include.NON_NULL 的结果是没有字段
ooo4
2024-01-29 19:11:23 +08:00
前端加一大段```a?.b?.c?.d ?? "无数据"```
zjsxwc
2024-01-29 19:23:03 +08:00
我写 js 就喜欢 null ,

如何某个字段是 object , 但这个 object 数据没有,那你也必须给我一个 null 值,不然如果你直接不给我这个字段,我 js 取这个字段时就直接报错执行不下去。
zjsxwc
2024-01-29 19:25:58 +08:00
我写 js 就喜欢 null ,

如果某个字段是 object , 但这个 object 数据没有,那你也必须给我一个 null 值,不然如果你直接不给我这个字段,我 js 取这个字段时就直接报错执行不下去。

如果某个字段是 int ,你却给了我一个 0 ,我怎么表示,这是业务上比如用户还没填写,还是用户已经填写了 0 ,string 也一样道理。
xuanbg
2024-01-29 21:01:19 +08:00
null 就是 null 。又不是我要给 null ,肯定是你前端没给数据数据库里面才存的 null 。你前端凭啥不要 null ?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1012490

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX