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 格式无法解析。
解决:
-
全局配置日期格式
-
字段上加注解
@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防止金额精度丢失 - 日期全局配置 + 注解双保险