Spring Boot 集成 Fastjson2 完整教程:从入门到避坑

Fastjson2 是阿里推出的高性能、安全、全场景支持 的 JSON 处理库,相比 1.x 更快、更安全、Bug 更少,支持 JSONB、JSONPath、Kotlin、GraalVM 等特性。这篇文章带你在 Spring Boot 项目里快速集成、正确配置、避开常见坑


一、Fastjson2 核心优势

  • 性能远超 Fastjson1.x、Jackson、Gson
  • 修复大量历史安全漏洞
  • 支持 JSON/JSONB 双格式
  • JSONPath 原生支持
  • 兼容 Java/Android/Kotlin/大数据/GraalVM
  • Spring MVC 无缝集成

二、Spring Boot 集成步骤

1. Maven 依赖(直接复制)

复制代码
<!-- fastjson2 核心 -->
<dependency>
    <groupId>com.alibaba.fastjson2</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.0.40</version>
</dependency>

<!-- Spring5/SpringBoot2 扩展包 -->
<dependency>
    <groupId>com.alibaba.fastjson2</groupId>
    <artifactId>fastjson2-extension-spring5</artifactId>
    <version>2.0.40</version>
</dependency>

2. 替换 Spring MVC 消息转换器

把 Spring 默认的 Jackson 换成 Fastjson2,让 @ResponseBody / @RequestBody 都走 Fastjson2。

复制代码
@Configuration
public class Fastjson2Config implements WebMvcConfigurer {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();

        // Fastjson 配置
        FastJsonConfig config = new FastJsonConfig();
        // 日期格式
        config.setDateFormat("yyyy-MM-dd HH:mm:ss");
        // 序列化特性:输出null、格式化、BigDecimal不丢精度
        config.setWriterFeatures(
                JSONWriter.Feature.WriteMapNullValue,
                JSONWriter.Feature.PrettyFormat,
                JSONWriter.Feature.WriteBigDecimalAsPlain
        );
        // 反序列化特性:支持数组转Bean、字段匹配更智能
        config.setReaderFeatures(
                JSONReader.Feature.FieldBased,
                JSONReader.Feature.SupportArrayToBean,
                JSONReader.Feature.SupportSmartMatch
        );

        converter.setFastJsonConfig(config);
        converter.setDefaultCharset(StandardCharsets.UTF_8);
        converter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON));

        // 放到最前面优先使用
        converters.add(0, converter);
    }
}

3. 测试接口

复制代码
@RestController
public class TestController {

    @GetMapping("/test")
    public Map<String, Object> test() {
        Map<String, Object> map = new HashMap<>();
        map.put("code", 200);
        map.put("msg", "Fastjson2 集成成功");
        map.put("nullValue", null);
        return map;
    }
}

启动访问:http://localhost:8080/test

返回格式化 JSON、null 正常输出 → 集成成功。


三、Fastjson2 常用 API

1. Java 对象 → JSON 字符串

复制代码
String json = JSON.toJSONString(obj);

2. JSON 字符串 → Java 对象

复制代码
User user = JSON.parseObject(json, User.class);

3. JSON 数组 → List

复制代码
List<User> userList = JSON.parseArray(json, User.class);

4. List → JSON 字符串

复制代码
String json = JSON.toJSONString(list);

5. JSONPath 读取(超好用)

复制代码
String name = JSONPath.of(json).getString("$.data.name");

四、生产必看:2 个高频坑 + 解决方案

坑1:BigDecimal 精度丢失(非常重要)

问题-40090.07 变成 -40090.7,金额直接出错。

原因:默认以科学计数/浮点处理。

解决 :加特性 WriteBigDecimalAsPlain

复制代码
JSON.toJSONString(obj, JSONWriter.Feature.WriteBigDecimalAsPlain);

坑2:日期解析/格式化异常

问题yyyy-MM-dd HH:mm:ss 格式无法解析。

解决

  1. 全局配置日期格式

  2. 字段上加注解

    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;


五、推荐配置(生产直接用)

复制代码
// 序列化推荐
config.setWriterFeatures(
    JSONWriter.Feature.WriteMapNullValue,        // 输出 null 字段
    JSONWriter.Feature.WriteBigDecimalAsPlain,   // BigDecimal 不丢精度
    JSONWriter.Feature.PrettyFormat,             // 格式化输出
    JSONWriter.Feature.WriteDateUseDateFormat    // 全局日期格式化
);

// 反序列化推荐
config.setReaderFeatures(
    JSONReader.Feature.SupportSmartMatch,        // 智能匹配字段
    JSONReader.Feature.IgnoreNullCheck,          // 忽略 null 检查
    JSONReader.Feature.AllowUnmatchedField      // 忽略不存在字段
);

六、总结

  • Fastjson2 = 高性能 + 安全 + 功能强
  • Spring Boot 集成只需两步:引依赖 + 配置转换器
  • 生产务必开启:WriteBigDecimalAsPlain 防止金额精度丢失
  • 日期全局配置 + 注解双保险
相关推荐
lightningyang1 小时前
密码技术应用实验—AES 对称加密与口令安全初体验
网络·安全·天枢一体化虚拟仿真平台·密码技术应用
她说..1 小时前
MySQL 与 Java 的 JSON 数据处理
java·mysql·json·springboot
jimmyleeee2 小时前
大模型安全之七:LLM系统提示词泄露
人工智能·安全
爱折腾的编程老炮2 小时前
潮玩小程序订单模型-一张表装下所有玩法
spring boot·小程序·uni-app
是隼人2 小时前
buuctf-pwn jarvisoj_level5(64位ret2libc)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
2601_966377132 小时前
运营商密评密改落地实践:透明加密解决密码应用合规与安全痛点
数据库·安全·oracle
BS30813_vx2 小时前
31754+基于 Spring Boot + Vue 的网络文学交流分享平台设计与实现
vue.js·spring boot·后端
孤狼warrior3 小时前
SCTR 五次失败的安全 BN 路由器
人工智能·python·深度学习·算法·安全·yolo
找方案3 小时前
AI安全攻防:大模型越狱、提示注入与防御之道
人工智能·安全·机器学习
智购科技自动贩卖机3 小时前
自动售货机嵌入式系统安全加固实践:从Go语言国密算法到硬件防拆的工程化落地
大数据·人工智能·后端·安全·golang·系统安全