Apache Fory JSON或许可以替代FastJson

@Autowired(required=false)注入注意的问题 1、前言在使用spring开发过程中,我们基本上都是使用@Autowired这个注解,用来注入已有的bean。但是有些时候,会注入失败。当我们加上参数(required=false)就能解决。今天整理一个我在实际开发中的例子2、required属性@Autowired(required=true):当使用@Autowired注解的时候,其实默认就是@Autowired(required=true)... 阅读详情

01 引言

2026 年 7 月 21 日,一个足以震动整个 Java 圈的安全公告悄然发布——fastjson 1.2.68 至 1.2.83 全版本远程代码执行漏洞(CVE-2026-16723)被正式披露。这是 fastjson 1.x 的最后一个版本,也是"补丁打不动"的终极注脚。

与此同时,Apache Fory 作为一个由 JIT 和零拷贝技术驱动的多语言序列化框架,正在 Apache 基金会的孵化下迅速崛起,成为序列化领域最耀眼的明星。

02 简介

Apache Fory™ 是一个速度极快的多语言序列化框架,面向符合语言习惯的领域对象、 Schema IDL 和跨语言数据交换。

Fory 专为跨语言、跨执行平台的紧凑高吞吐序列化而设计。它可以直接处理应用对象,在需要稳定 契约时支持共享 Schema,并保留共享引用、循环引用和多态值的具体类型等对象图特性。

在GitHub上已经斩获4.5k的star。

GitHub地址:https://github.com/apache/fory

官网地址:https://fory.apache.org/zh-CN/docs/introduction/

03 快速实战-对象

3.1 引入依赖

Fory细分了很多包,我们先看核心包:

<dependency>
    <groupId>org.apache.fory</groupId>
    <artifactId>fory-core</artifactId>
    <version>1.6.1</version>
</dependency>

其中主要针对Java对象的序列化

3.2 简单使用

Fory可以在 Java 的系统中替代 JDK 序列化、Kryo、FST、Hessian或者 Protocol Buffers 载荷。

// 序列化
@Test
void test01() {
    Fory fory = Fory.builder().build();

    OrderItem orderItem = new OrderItem();
    orderItem.setId(1000L);
    orderItem.setName("ws001");

    fory.register(OrderItem.class);

    byte[] serialize = fory.serialize(orderItem);

    OrderItem deserialize = fory.deserialize(serialize, OrderItem.class);
    System.out.println("deserialize: " + deserialize);
    // deserialize: com.simonking.ws.boot.i18n.pojo.OrderItem@71c27ee8
}


// 拷贝对象
@Test
void test04() {
    Fory fory = Fory.builder().build();

    Order order = new Order();
    order.setId(1L);
    order.setName("ws");
    order.setPrice(18.0);

    fory.register(Order.class);
    fory.register(OrderItem.class);

    Order copy = fory.copy(order);
    System.out.println("order: " + order) ;
    System.out.println("copy: " + copy) ;
    // order: com.simonking.ws.boot.i18n.pojo.Order@6d3c5255
    // copy:  com.simonking.ws.boot.i18n.pojo.Order@b1712f3
}

3.3 注意事项

注册

针对对象序列化和反序列化时,需要注册使用的类:fory.register(OrderItem.class)

否则就会出现异常:

Date逃逸

在序列化对象时,如果存在Date属性,序列化就会报错:

日期仅支持LocalDate、LocalDateTime、Instant。

直接序列化Date

直接序列化又是可以的:

04 快速实战-JSON

对应的JSON需要引入新的依赖。

4.1 引入依赖

<dependency>
    <groupId>org.apache.fory</groupId>
    <artifactId>fory-json</artifactId>
    <version>1.6.1</version>
</dependency>

4.2 简单使用

JSON的使用极其简单,和其他框架很类似,使用的关键类为:ForyJson

@Test
void test02() {
    ForyJson foryJson = ForyJson.builder().build();

    Date date = new Date();
    User user = new User();
    user.setId(1L);
    user.setName("ws");
    user.setAge(18);
    user.setBirthDate(date);
    String json = foryJson.toJson(user);
    System.out.println(json);

    User user1 = foryJson.fromJson(json, User.class);
    System.out.println(user1);
}

这里的Date序列化不受影响,正常处理。默认转成json之后是时间戳。如果想要变成yyyy-MM-dd,则需要注册Codec。

 ForyJson foryJson2 = ForyJson.builder()
                .registerCodec(Date.class, DateYyyyMmDdCodec.INSTANCE)
                .build();

05 小结

Fory 采用了根本性更安全的设计:

  • 类型注册制:必须显式注册的类型才能被序列化/反序列化,不存在"数据决定类型"的攻击面
  • 无 @type 注入:序列化格式中不包含可被攻击者控制的类型标识
  • Apache 基金会治理:安全流程规范,漏洞响应及时
  • 二进制格式:相比 JSON 文本格式,攻击面更小

而Fastjson 1.x 以 CVE-2026-16723 画上了一个并不光彩的句号。从 2017 年到 2026 年,近十年间反复被绕过的 autoType 机制,成为 Java 安全史上最生动的反面教材。

Fory 的功能远不止这些,感兴趣的话可以深入探索…

jsp页面打jar包及其引用 1、前言 项目开发中,需要把一些公共页面抽取到公用的项目中,打成jar包全局使用,便于修改和维护。最常见的就是会把公用的方法或者实体类打成jar包,这种很好用,直接导入依赖,导包就完事了。但是页面的打包笔者开发的时候,搞了好久,终于搞定。记录一下,方便日后使用。 2、页面的打包 正确的打包方式,开发者可以像页面在项目中一样的方式去引用(js、css等同理)。 jar工程只用两个主要的文件夹src 阅读详情

相关推荐

Redis7系列:Redis对决RedisStack

Redis 是一个开源的内存数据库,以高性能、低延迟著称,支持基础数据结构(如字符串、哈希、列表、集合、有序集合等),常用于缓存、消息队列、实时数据处理等场景。Redis Stack 是 Redis 的扩展版本,整合了 Redis 核心数据库与多个高级功能模块(如全文搜索、JSON 文档存储、图数据库、时间序列等),提供“一站式”解决方案,简化了复杂数据场景的开发。

static_coder的博客 2890

Jackson、Fastjson2、Apache Fory JSON 深度对比与原理剖析

在 Java 生态的 JSON 序列化技术选型中,Jackson、Fastjson2 与 Apache Fory JSON 是当前最具代表性的三款框架。三者分别代表了「生态标准型」「性能极致型」和「新兴架构型」三种技术路线,在实现原理、行为特性、安全设计和适用场景上存在显著差异。本文从底层实现原理出发,围绕输出格式、生态地位、性能表现、循环引用处理、类型保留、安全模型、跨语言支持等核心维度展开深度对比,梳理各框架的设计取舍与潜在问题,为技术选型和工程实践提供参考。

weixin_52039841的博客 259

STC8H硬件IIC从机模式实战:手把手教你驱动OLED屏幕(附完整代码)

本文详细介绍了如何使用STC8H单片机的硬件IIC从机模式驱动SSD1306 OLED屏幕,包括硬件连接、寄存器配置、中断处理和实际应用中的优化技巧。通过完整的代码示例和实战经验分享,帮助开发者快速掌握I2C通信协议和OLED屏幕驱动技术,提升嵌入式开发效率。

weixin_33747129的博客 336

Apache Fory:Kotlin原生JSON序列化12倍加速原理

JSON序列化是现代应用开发的基础能力,其性能与类型安全直接受语言特性制约。Kotlin作为JVM/跨平台主力语言,长期受限于Java生态反射、泛型擦除与内存分配三大瓶颈。Apache Fory通过深度绑定Kotlin编译器AST、利用数据类结构契约与内联函数零开销特性,在编译期生成专用序列化器,实现运行时零反射、零中间对象、零动态类型推导。该方案不仅达成12×性能提升,更重构了Kotlin开发者对序列化的认知——将`@Serializable`从运行时注解升格为编译期契约,使JSON处理回归Kotlin原

weixin_33811539的博客 238

CUDA 12.1环境下的动态库链接修复:从libcusparse.so.12的undefined symbol错误到libnvJitLink.so.12的正确加载

本文详细解析了在CUDA 12.1环境下,PyTorch因libcusparse.so.12找不到libnvJitLink.so.12中的__nvJitLinkAddData_12_1符号而报错的根本原因。通过诊断动态链接过程,提供了创建符号链接、修改环境变量等三种解决方案,并深入探讨了nvJitLink组件的作用及环境配置的最佳实践,帮助开发者彻底解决此类动态库链接问题。

c8d9e0f1的博客 201

用SimaPro做碳足迹分析:手把手教你完成产品生命周期评估报告

本文详细介绍了如何使用SimaPro进行碳足迹分析,从软件安装到生命周期评估报告的完整流程。通过实战案例演示,帮助制造业企业、咨询机构和科研团队掌握产品生命周期评估(LCA)的核心技术,精准识别环境热点并优化决策,为可持续发展转型提供科学依据。

yhn45678901的博客 711

Sa-Token v1.46.0 发布,来看看有没有令你心动的功能!

Sa-Token v1.46.0 发布,主要更新包括:新增 Apache Fory JSON 插件支持;为 Spring Boot 项目补充 RestClient/RestTemplate HTTP 客户端;支持 Redisson 独立配置实现权限与业务缓存分离;优化 Redis 查询改用 SCAN 命令、支持 key 前缀隔离;新增注销前侦听器功能,便于记录审计日志。该版本还修复了多个社区反馈问题,推荐通过 Maven 中央仓库升级使用。

shengzhang_的博客 341

具身智能端到端大模型VLA (Vision Language Action)

在语言为条件的机器人任务中,策略必须具备理解语言指令、视觉感知环境并生成适当动作的能力,这就需要VLA的。例如,在自动驾驶领域,传统的做法是将感知、预测、规划等步骤分开处理,而VLA则试图用一个统一的框架来替代这种分立的方法。另外,VLA的模型对于算力的需求很大,单片AI算力1000Tops的Thor大概率会延期发布,加上英伟达芯片的量产时间与成本挑战,以及在国内的应用情况,对车企而言是个大问题。以谷歌DeepMind推出的RT-2为例,该模型可以在新的物体、背景和环境中表现出显著改善的性能。

具身智能机器人 1万+

Apache Seata(incubating) 2.4.0 版本特性深度解析:Kingbase XA、控制台迁移、Fury 序列化与单点限流实战

Apache Seata(incubating) 是一款开源的分布式事务解决方案,以高性能、简单易用著称,覆盖 AT、TCC、SAGA 与 XA 四种事务模式。2.4.0 版本在数据库生态扩展、Raft 高可用、客户端 I/O 性能、序列化能力与安全加固等方面均有明显进展,本文以官方 2.4.0 发布说明([changes/zh-cn/2.4.0.md](https://link.gitcode.

gitblog_00898的博客 219

SCL3400-D01双轴高精度倾角计

简介 两轴高精度加速度计,提供两个模式。 ±30° with 10 Hz LPF ±90° with 40 Hz LPF Resolution up to 32768 LSB/g Ultra-low 0.0009°/√Hz noise density 这款传感器是替换之前村田的停产的模拟量系列的芯片,正在测试中,具体效果大伙可以评测。 一、引脚连接图 引脚图兼容SCL3300 二、SPI接口 1.SCL3300和SCL3400略有区别如下图 左边为SCL3...

专注惯导领域 3804

RK3568平台开发系列讲解:Linux wifi的调试

查询结果中state为ENABLE,表示hostapd程序启用成功。首先查看设备是否存在。

内核笔记 165

logback的简单使用

1、前言 查了很多资料,都说logback的性能都要比log4j的性能要好,logback逐渐要取代log4j。今天对logback作一个简单的整理。 2、logback的依赖坐标 &lt;!-- &lt;dependency&gt; &lt;groupId&gt;org.slf4j&lt;/groupId&gt; &lt;artifactId&...

static_coder的博客 2万+

国社科基金申报书“选题与说明依据”用AI怎么写?借助Gemini 3 Pro一次理清研究演进逻辑

研究进展部分要明确指出已有研究的不足与局限,比如方法不足、数据或材料受限、研究视角单一等等局限,之后要找准研究切入点,自然引申出自己的研究问题。为提升课题申报书的质量,学术史梳理要遵循述评结合、中外结合、新老结合的原则,不仅“述”,更要“评”,兼顾国内研究与国际学术动态,统筹经典研究与最新成果。它是对选题的整体概述,需阐明研究的具体问题、视角以及核心概念。2)存在问题或争议:结合已有研究或实践现状,指出该领域在理论建构、测量工具、实践应用或研究结论方面仍存在的不足、空白或争议,明确研究的必要性;

智能AI让学术科研更容易 938

FORM表单的几大属性

FORM表单的几大属性问题引入 在做一个活动支付项目的时候,提交订单(form表单)跳转支付页面发现没有反应。经过断点排查发现断点也进了,不报错。但是返回的就是空白页,让人很纠结。 进过反复测试,才发现是杀毒软件拦截了form表单的请求。如何来解决这个问题呢?下来我们来看看Form表单的属性就会明白了。 FORM的属性 method属性:规定用于发送 form-data 的 HTTP

static_coder的博客 1万+

ubuntu22.04下对使用linuxdeployqt发布的qt程序进行deb打包操作

【代码】ubuntu22.04下对使用linuxdeployqt发布的qt程序进行deb打包操作。

十三阿哥的博客 1399

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

spring容器启动,初始化某个方法(init)

1、前言 很多时候,我们需要在项目启动的时候,就要完成某些方法的执行。今天整理了一个简单的方法,使用spring容器中bean的属性:init-method 2、代码/* 初始化的类。这里不需要添加任何注解 */ public class InitData { @Autowired private UserService userService; /*

static_coder的博客 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

图片转化为base64及上传

1、前言 很多时候我们需要将图片转化成base64,并且上传。这里整理了一些关于图片转化base64的方法,方便以后使用。 2、页面demo html&gt; head lang=&quot;en&quot;&gt; meta charset=&quot;UTF-8&quot;&gt; title&gt;图片转化成Base64title&gt; head&gt;

static_coder的博客 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IntelliJ IDEA AI Assistant 携带OpenCode保姆级安装教程来了

的安装包,只不过界面没有明确的提示。可能由于网络原因下载失败,导致对话框无法使用。官方推出的 AI 驱动插件,专为软件开发设计。但是之前由于需要订阅才能使用,安装了之后又卸载了。安装上一节已经介绍了,这里不在赘述。明显显示已经安安装好了,几乎秒级安装,怎么感觉都有点离谱。但是在对话框无法使用,无法发出信息,也没有选择模型的地方。高版本中,必须登录之后才能使用,如果初次使用需要认证输入。其他的AI客户端大同小异,感兴趣的老铁快去试试吧。上面介绍了在线安装的方法。模式分析,没有问题了在修改。

static_coder的博客 8313

IdentityHashMap :key值可以重复的Map集合

问题引入 初学java的时候,Map集合给人留下的印象就是键值对{key=value}的存储方式。并且我们知道键值对的可以唯一。但是Map容器真的不能存储key值相同的数据吗?查询API才发现有这么一个实现类可以存储重复的key:IdentityHashMap。IdentityHashMap简介 IdentityHashMap类同样实现了Map接口,拥有Map集合的一切特性。key值同样需要

static_coder的博客 5068

TeamViewer、向日葵平替?这几款免费远程控制软件,真香!

号称时尚最安全的远程桌面。这是一款近年来在中国市场非常火爆的远程控制软件,因其对国内网络环境做了深度优化,在速度和延迟方面表现优异,被许多人视为。

static_coder的博客 4073

针对iphone手机拍照片旋转90度问题解决

/* 1、图片上传的方法 */ @RequestMapping(value = "/uploadPic", method = RequestMethod.POST) @ResponseBody public JsonResult upload(@RequestParam("file") MultipartFile[] files){ Boolean flag

static_coder的博客 3937

springboot集成webSocket实现网络实时通讯

1、前言 在很多业务场景中,对实时数据要求比较高,我们就不能采用轮训拉取的方式来获取数据了。就可以采用websocket的长链接的形式,实时有服务端或者客户端推送数据,已达到数据的实时展示。 2、websocket简介 SpringBoot官方推荐的基于STOMP实现,STOMP:即Simple Text Orientated Messaging Protocol,它是一个简单的文本消息传输协议,属于 WebSocket 的子协议, 提供了一个可互操作的连接格式,允许STOMP客户端与任意...

static_coder的博客 3802

使用shiro标签遇到的坑

1、前言 使用shiro框架做权限控制是不错的选择,在使用shiro标签的过程中,是否会遇到一些坑呢。恰好笔者遇到了,在此记录一下。 2、shiro标签坑的描述 标签: <shiro:haspermission name="你的权限"></shiro:haspermission> 当使用的标签具有层级关系的时候,就有可能掉坑里,并且出不来。 例如: 第一层级...

static_coder的博客 3526

java使用Qrcode生成二维码(内嵌logo)

1、前言 整理一个使用qrcode.jar生成二维码的测试方法,以备后面学习使用。 2、使用准备Qrcode.jar3、demo /* 生成二维码 */ @RequestMapping(value="/creatQrcode", method = RequestMethod.POST) @ResponseBody public Object

static_coder的博客 3522

springmvc 框架中的数据的绑定:@InitBinder&@DateTimeFormat()

1、前言 表现层经常会接受页面表单的数据,springmvc框架提供了封装javaBean的功能,但是针对一些特殊的属性,则不会自动封装(比如java.util.Date类型),需要我们自行绑定。这里介绍两种解决的办法:@InitBinder&amp;@DateTimeFormat() 2、@DateTimeFormat()绑定Date类型 @DateTimeFormat()实现数据的绑定比...

static_coder的博客 3030

深入 Apache Hudi Write Operations:一次 Upsert 到底经历了什么?

Apache Hudi Write Operations

喻师傅的学习笔记 633
上一篇: AI逆向实战:一个壁纸网站被我5分钟摸透了,你也能
下一篇: 写文档的最佳搭档:Typora+PicLIst+SM.MS
智_永无止境
博客等级 码龄10年 803粉丝 403原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智_永无止境

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值