
1 undef404 2022-05-25 09:56:02 +08:00 没用过 fastjson ,但是经常看到爆出漏洞的新闻。 |
2 dcsuibian 2022-05-25 09:57:33 +08:00 Spring Boot 默认 logback 和 Jackson ,真是 nice 。 |
3 rekulas 2022-05-25 09:57:37 +08:00 阿里巴巴:fastjson 现在负面有点多,这样吧咱们出个 fastjson2 重来 |
4 rekulas 2022-05-25 09:58:21 +08:00 |
序列化库都这样 |
7 fanxasy OP 我之前也想把项目从 fastjson 迁移到 spring 自带的 jackson 去,然而当我点开一个转换工具类,5 位数行代码里一片 jsonobject 、jsonarray ,我放弃了... |
8 Reficul 2022-05-25 10:46:42 +08:00 > 又不是不能用.jpg |
9 tusj 2022-05-25 10:47:59 +08:00 bugest json |
10 NoKey 2022-05-25 10:50:43 +08:00 问个问题,为啥不用 gson 呢? |
11 fwee 2022-05-25 10:51:29 +08:00 我就问你快不快吧,毕竟不叫 safejson |
12 sheeta 2022-05-25 10:53:03 +08:00 其实我一直想不明白,JSON 这么重要的场景,Java 都没有一个官方的序列化的库吗,反而各种库横行( Jackson, FastJson, Gson 等等)。其他语言如 PHP, Go, Python 都是官方支持 JSON 解析的吧 |
13 calano 2022-05-25 11:20:24 +08:00 所以现在 fastjson2 能用了吗,依赖太多实在换不动 |
14 6IbA2bj5ip3tK49j 2022-05-25 11:30:46 +08:00 开个地图炮,用着 spring 全家桶,还在用 fastjson 的,都是 sb 。 |
15 LeegoYih 2022-05-25 12:02:37 +08:00 个人几乎不用阿里开源框架 /工具 |
17 chenshun00 2022-05-25 12:25:36 +08:00 @xgfan 不好意思,傻逼就是在下 |
18 chendy 2022-05-25 12:27:50 +08:00 其实 jackson 之类的一样有漏洞,一样要升级( spring 全家桶的话跟着一起升级就行) 只是 fastjson 作为阿里开源,相关消息关注度更高 |
19 MakHoCheung 2022-05-25 12:31:33 +08:00 @sheeta 有官方(现在应该不算了)规范,JSON-P 和 JSON-B ,但是实现都在 Jakarta EE 容器里面。 |
21 cp19890714 2022-05-25 12:50:26 +08:00 我不能理解 “用 spring ,又特意改为 fastjson” 这种操作。 |
22 AA5DE3F034ACCB9E 2022-05-25 12:53:45 +08:00 @cp19890714 先入为主吧,像初学者搜索问下 Java 怎么处理 Json ,推荐的基本是 fastjson ,用习惯了 api 又怎么能轻易换 |
23 moen 2022-05-25 13:13:06 +08:00 阿里继续向外输出人才后估计又有更多公司要改成 Java ,按他们的习惯用上各种阿里的库( |
24 nothingistrue 2022-05-25 13:41:38 +08:00 @sheeta #12 Java 有官方的序列化,因为安全漏洞实在难以修复,已经确定要被抛弃,只是因为替代品还没弄好一直没有正式抛弃。至于 JSON ,它属于类似 XML 那样的跨平台数据格式,原本不是为序列化 /反序列化服务的,即无法成为 Java 内部标准,也无法让 Java 为其提供 JDK 级别的实现,这点跟 XML 一样的待遇,很正常。 |
25 Oktfolio 2022-05-25 13:41:57 +08:00 @cp19890714 基本没人改 Spring MVC 的默认 JSON 序列化库吧...... |
26 est 2022-05-25 13:50:49 +08:00 我觉得 java 不支持 json 主要是因为强类型吧。 |
27 dlyxy 2022-05-25 13:53:03 +08:00 一般的序列化库都有问题,包括 Jackson ,可以看下这个 https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet 不过貌似 Gson 没出过大问题 |
28 nine 2022-05-25 13:53:04 +08:00 Java 这么繁荣是有道理的,连个 JSON 解析库都做不好,大把的输出时间换工资啊。 |
29 AlkTTT 2022-05-25 13:54:42 +08:00 @cp19890714 组内大部分同事对阿里开源有蜜汁崇拜,fastjson ,easyexcel ,nacos 都在用,劝都劝不动 |
30 Joker123456789 2022-05-25 13:55:31 +08:00 @nine 原来在你的逻辑里, 越麻烦 就越流行啊? 真是万年一遇的天才。 |
31 NoKey 2022-05-25 13:57:51 +08:00 @Goooooos 谢谢回复,我搜了一下,也没找到 gson 性能差多少的资料,能找到的性能比较看起来那点性能差异对服务影响不大,除非是那种大量解大 json 任务的 |
32 Joker123456789 2022-05-25 13:57:52 +08:00 @cp19890714 没多少人特意改为吧? 接收参数,响应参数等 框架自带的功能 又没人动。 只是需要手工处理 json 的时候 采用 fastjson ,因为用起来方便,不需要自己写工具类。jackson 确实麻烦了一点点。 只是一点点。 |
33 96XL 2022-05-25 14:29:35 +08:00 hutool 的 json 咋样 |
35 nine 2022-05-25 15:45:34 +08:00 @Joker123456789 存在即合理,我是发现者,不是定义者。 |
36 6IbA2bj5ip3tK49j 2022-05-25 16:12:36 +08:00 @Joker123456789 你这个就是 fastjson 使用者的典型例子。 很多 fastjson 的使用者不知道,jackson 的 objectMapper 早就注入到 spring context 里了。 直接用就好了,压根不存在“需要手工处理 json 的时候 采用 fastjson ,因为用起来方便,不需要自己写工具类”。 |
37 fiveStarLaoliang 2022-05-25 16:32:17 +08:00 看来学艺不精的不在少数,spring 全家桶稍微研究一下就知道 objectMapper 是现成的,直接拿来用就行了 |
40 DrJoseph 2022-05-25 17:27:06 +08:00 记者:你有什么特长 大爷:我心算很快 记者:1+1 等于多少 大爷:5 记者:不对 大爷:但我算的快 |
41 NewTab12138 2022-05-25 17:30:26 +08:00 建议离阿里的开源项目远一点 |
43 elintwenty 2022-05-25 17:30:38 +08:00 @Joker123456789 gson 并不比 fastjson 难用,上手极快 |
44 dqzcwxb 2022-05-25 17:30:45 +08:00 Fastjson 出 bug 就是国产垃圾 Jackson 出 bug 就是难免出问题能理解 |
45 dbpe 2022-05-25 17:32:12 +08:00 @MakHoCheung jakarta 这玩意...我记得 base in jdk11 吧? |
46 hidemyself 2022-05-25 17:50:23 +08:00 v 站输出阿里也是政治正确吗。。 Dubbo,Druid,Nacos,Sentinel,arthas 等等好像都是阿里的 |
47 debuggeeker 2022-05-25 17:57:33 +08:00 当一个漏洞公开声明的时候,已经没有利用价值了 |
48 opengps 2022-05-25 18:04:42 +08:00 反过来想,其实那些“没有问题的库”,出问题风险更大 |
49 pcmgr456 2022-05-25 18:23:29 +08:00 via Android @cp19890714 毕竟国内很多人觉得阿里开源的东西高级 |
50 jim9606 2022-05-25 19:10:29 +08:00 又是 AutoType 的问题。 罪过就是功能太强大,功能一复杂就容易出漏洞。 跟 Log4j 那个漏洞也是有一些相似,有多少人知道为啥一个日志库有动态 class 执行的功能呢。 |
51 ivechan 2022-05-25 19:13:32 +08:00 国外很多开源软件其实也有漏洞。。。大可平常心看待。 |
52 ufan0 2022-05-25 19:20:45 +08:00 早期确实坑爹,现在就平常心看待吧,出问题不可怕,怕的是解决不了以及解决效率。 就这点看来,fastjson 还是优秀的。 另外慎用 fastjson2 ,同事近期还给 fastjson2 提了兼容性 issue 已被确认。 |
53 Oktfolio 2022-05-25 19:25:15 +08:00 |
54 EarthChild 2022-05-25 19:34:09 +08:00 |
56 zhleonix 2022-05-25 19:49:31 +08:00 @AA5DE3F034ACCB9E 的确,Fastjson 的 API 比较简单,jackson 麻烦。 |
57 ychost 2022-05-25 19:56:36 +08:00 基本的序列化 /反序列化都有类似漏洞,关 authType 保平安,那玩意儿除了 RPC 之外,其它应用场景真的很少 |
58 sprite82 2022-05-25 21:27:40 +08:00 @xgfan #36 人家不是说了,要手写工具类,Jackson api 实在不好用,这也是 fastjson 流行的原因之一。而不是注入不注入的问题,哪怕不是注入的,写个单例也比定义个变量再用注解方便 |
60 6IbA2bj5ip3tK49j 2022-05-25 21:41:33 +08:00 @sprite82 最常用的 encode/decode ,两者基本没区别 ``` objectMapper.writeValueAsString(car); JSON.toJSONString(car); objectMapper.readValue(json, Car.class); JSON.parseObject(jsonString, Car.class); ``` |
61 6IbA2bj5ip3tK49j 2022-05-25 21:44:01 +08:00 至于使用静态 JSON.xxxx 方法好,还是注入好,这个涉及到个人偏好问题了。 |
62 XhstormR02 2022-05-25 22:09:07 +08:00 via Android @xgfan 静态就不用 new 了,像 jackson 还要得自己 new ,小白说这可太复杂了,狗头保命。我站 boot ,boot 用啥我用啥 |
63 HiShan 2022-05-25 22:09:56 +08:00 请问在座的各位能写一个又快又安全的 JSON 库出来吗?又要用又要说别人垃圾漏洞多。还能扯到 Java 垃圾连个自带的 json 库都没有。。不能做一个有礼貌的伸手党吗? |
64 sprite82 2022-05-25 22:11:30 +08:00 @xgfan writeValueAsString 和 toJSONString ,我觉得后者更直白些,我感觉不爽的是 Jackson 会抛异常,我要专门处理它,所以我一般会写个工具类,用 fastjson 的 api 名字来包一下 Jackson 。态和注入,我觉得综合考虑还是静态更好,注入的话没法直接在静态方法中使用 |
65 Bromine0x23 2022-05-25 22:41:01 +08:00 只能说对应大部分开发者来说易用性确实大于可扩展性。 性能上的话,当下 fastjson1 对比 jackson 已经没优势了: https://github.com/fabienrenaud/java-json-benchmark |
66 locochen 2022-05-25 23:00:20 +08:00 这个标题, 有的那啥了. 开源是好事, 选择使用, 就要有风险预期. 不然资深开发拿那么高工资, 是玩了. |
67 Naccl 2022-05-25 23:10:23 +08:00 代码洁癖不能忍受自己的 spring 项目额外依赖个 fastjson |
68 Dregs2 2022-05-25 23:59:51 +08:00 via Android vert.x 里对 jackson 的封装蛮好用的 |
69 aragakiyuii 2022-05-26 00:00:25 +08:00 via iPhone @AlkTTT 求问一下 easyexcel 有啥替代品吗 |
70 leeg810312 2022-05-26 00:10:09 +08:00 via Android .net 和 Java 都写,还是.net 好,json 序列化只有 2 个库,一个官方一个 Newtonsoft ,用到现在也没有听到哪个有重大漏洞。 |
71 seepiner 2022-05-26 00:35:29 +08:00 可以用这个封装 jackjson 的库 <dependency> <groupId>com.seepine</groupId> <artifactId>json</artifactId> <version>0.0.2</version> </dependency> 主要封装了个 J sonObject 以及提供成静态方法 JsonObject jsOnObject= Json.parseObj("jsonStr"); ArrayNode arrayNode = Json.parseArray("jsonStr"); Bean bean = Json.parse("jsonStr", Bean.class); String jsOnStr= Json.toJson(bean); |
72 micean 2022-05-26 00:47:18 +08:00 via Android jackson 还是结合 kotlin 最好用 |
73 xuanbg 2022-05-26 05:02:11 +08:00 说什么 jackjson 的 api 难用的,就不能自己简单封装几个静态方法么?再说,你们都用不到深拷贝和类型转换的么? |
74 willygeek007 2022-05-26 09:06:20 +08:00 Bugjson |
75 bthulu 2022-05-26 09:20:38 +08:00 @xuanbg jackson 漏洞也没少啊。fastjson 国内用的多,尤其阿里用的多,国内好多黑灰产都在研究 fastjson 的漏洞,导致看起来 fastjson 的漏洞比 jackson 多不少。就跟 windows 上木马病毒比 linux 多一个道理,并不是 windows 不行,用的人多了,自然就有人来研究各种奇奇怪怪偏门的漏洞了,这反而证明了这个项目非常成功。 |
76 AlkTTT 2022-05-26 09:21:00 +08:00 @aragakiyuii 复杂的用原生 poi ,简单的用 hutool |
77 wupher 2022-05-26 09:26:46 +08:00 写开源软件还真就不是轻松的活 |
78 ZeroDu 2022-05-26 10:21:49 +08:00 有一说一:fastjson api 确实易用。不用各种处理异常; 还有 nacos 确实比其他注册中心 /配置中心好用多。一套搞定不折腾 |
@xuanbg 特地试了一下,怎么解析下划线和驼峰两种形式的 json ? 比如有些接口返回的 {"user_name":"aa"},有些接口{"userName":"aa"}。bean 字段 userName 。 自己封装静态方法只能指定一种映射方式,支持了下划线驼峰就会不支持。 |
80 bthulu 2022-05-26 11:14:26 +08:00 @zhongjun96 类里额外加一个 void setUser_name(xxx)的方法 |
81 mmdsun 2022-05-26 11:55:00 +08:00 via iPhone 阿里出品,必属() |
82 qjbcnrs 2022-05-26 18:38:50 +08:00 |
84 xuanbg 2022-05-27 02:21:58 +08:00 @zhongjun96 可以在 userName 字段上用 @JsonProperty("user_name")注解来指定输入的 user_name 字段对应到 bean 字段 userName |
85 xuanbg 2022-05-27 02:31:15 +08:00 @zhongjun96 哦哦,同时支持只能加个 set 方法。。。但这似乎是代码规范化的问题吧?接口不应该有统一的数据规范么,连 key 的名称都不一样是什么鬼?是不是你还要兼容有人用 UserName ? |
86 qjbcnrs 2022-05-27 09:00:39 +08:00 @xuanbg #84 我只是举个例子。最基本的,对接多家第三方 api 的话,下划线和驼峰肯定都是有的。抽取成静态 api 的话就只能支持一种。不然就要手动加注解。实际用起来是不如 fastjson 的 |
87 golangLover 2022-05-29 16:42:13 +08:00 via Android @dqzcwxb fj 的同一个问题出现几十次了。。。 |
88 liian2019 2022-05-31 14:10:39 +08:00 无脑喷的人多少没脑子的 |
89 Joker123456789 2022-05-31 17:47:37 +08:00 @xgfan 没有任何注解的实体类 也属于 context 吗? map 也属于吗? |
90 Joker123456789 2022-05-31 17:51:41 +08:00 @xgfan jaskson 需要在类上 添加 @JsonIgnoreProperties(ignoreUnknown = true) 才比较保险,属不属于麻烦一点点 的范畴? 还有,不用 spring 的时候,你拿出来显摆的那些知识点,还起作用吗? |
91 6IbA2bj5ip3tK49j 2022-05-31 18:01:28 +08:00 @Joker123456789 序列化 /反序列化的配置是可以配置在 objectMapper 上。 我只会 Spring ,别的都不会,会让你开心一点吗? 你接着(spring/jackson)+fastjson 混用吧。 |
92 Joker123456789 2022-05-31 18:03:41 +08:00 @xgfan 哦,原来还要配置一下啊,这又算不算 麻烦一点点的范畴呢? 一点点。 我们争论的 焦点 在于 “一点点”。 没想到 一句 “不用 spring 的时候” 就能刺痛你, 你也是够敏感的。 最后模仿你一下,你接着 光用 spring 吧。 |
93 6IbA2bj5ip3tK49j 2022-05-31 18:07:10 +08:00 @Joker123456789 帮你捋一捋整个来龙去脉吧。 #21 ,cp19890714 发言:`我不能理解 “用 spring ,又特意改为 fastjson” 这种操作。` #32 ,你表示“没多少人特意改为吧? 接收参数,响应参数等 框架自带的功能 又没人动。 只是需要手工处理 json 的时候 采用 fastjson ,因为用起来方便,不需要自己写工具类。jackson 确实麻烦了一点点。 只是一点点。” 后续所有讨论,不都是用了 Spring 的基础上吗,你搁这儿跟我扯什么“不用 spring”呢? |
94 Joker123456789 2022-05-31 18:10:35 +08:00 @xgfan 你还帮我 捋一捋??? 我:jackson 确实麻烦了一点点,只是一点点。 你:根本就没 接下来就好玩了,你接着说出了两个 “确实麻烦一点点的地方” 来证明 “他没有麻烦一点点”。 1. jackson 的 objectMapper 早就注入到 spring context 里了。 我就问你,没有任何注解的实体类,map ,list 等 属于 context 吗?? 2. 序列化 /反序列化的配置是可以配置在 objectMapper 上。 需要配置一下 属于 麻烦一点点的范畴吗??? 你连 基本的逻辑都没捋清楚,还帮我捋一捋???? |
95 6IbA2bj5ip3tK49j 2022-05-31 18:12:52 +08:00 @Joker123456789 在已经用了 Jackson 的前提下,再引入一个 fastjson 麻烦 ,还是继续使用统一的 jackson 麻烦。 这个问题都要争论,我无话可说。 |
96 Joker123456789 2022-05-31 18:17:27 +08:00 @xgfan jackson 是 spring 依赖的,我本来就需要引入 spring ,所以 jackson 的引入对我没有增加任何工作量。 我增加的工作量仅仅是 引入了一次 fastjson ,而且 一次性引入即可, 后面 我所提到的那些麻烦的点 就全都不存在了。 你信仰 jackson ,就好好信仰吧,当你喜欢一件东西的时候,他在你眼里就是完美的。 而我, 我自己写的框架里就是 jackson ,你不信的话可以去扒源码, 我是实实在在用过的人, 也是实实在在接纳了 jackson 的人, 不像你,带着偏见,在这批评一个你根本没接纳的东西。 |
97 6IbA2bj5ip3tK49j 2022-05-31 18:23:37 +08:00 @Joker123456789 确实没啥工作量,只需要出问题之后修双份漏洞而已。 别扣帽子,什么“显摆”、“信仰”、“偏见”。 我有说 fastjson 不好吗?我只是在批评“在一个项目内引入两个 json 工具”这种行为而已。 |