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 防止金额精度丢失
  • 日期全局配置 + 注解双保险
相关推荐
Wang15304 小时前
js核心概念
json
上海云盾-小余5 小时前
网站恶意爬虫拦截策略:智能识别与封禁实操方案
网络·爬虫·安全·web安全
2301_780789666 小时前
手游遇到攻击为什么要用SDK游戏盾手游遇到攻击为什么要用 SDK 游戏盾?
安全·web安全·游戏·架构·kubernetes·ddos
jameslogo7 小时前
如何用RocketMQTemplate发送事务消息
java·spring boot·rocketmq
黎阳之光7 小时前
黎阳之光:视频孪生重构新能源智慧工地,打造大型风光基地数智化建设标杆
大数据·人工智能·物联网·安全·数字孪生
Agent手记8 小时前
安全生产巡检全流程自动化与隐患预警方案:2026工业Agent落地实战指南
数据库·人工智能·安全·ai·自动化
无关86888 小时前
Spring Boot 项目标准化部署打包实战
java·spring boot·后端
jay神8 小时前
基于微信小程序课外创新实践学分认定系统
java·spring boot·小程序·vue·毕业设计
效能革命笔记8 小时前
Gitee DevSecOps 智能版本管理:军工软件工厂的依赖治理与供应链安全方案
网络·安全·gitee
未若君雅裁8 小时前
Spring Bean 作用域、线程安全与生命周期
java·安全·spring