Spring Boot 配置 JSON 返回空集合而不是 null 怎么做?

文章导读
最稳妥的做法是在 DTO 类中直接初始化集合字段,若需全局控制可通过实现 Jackson2ObjectMapperBuilderCustomizer 接口配置。
📋 目录
  1. 快速处理思路
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
A A

最稳妥的做法是在 DTO 类中直接初始化集合字段,若需全局控制可通过实现 Jackson2ObjectMapperBuilderCustomizer 接口配置。

先说结论:优先在代码层面初始化集合,全局配置适合作为兜底方案。

  • 适合:前端强依赖数组类型、老旧项目重构不便修改字段时
  • 先看:确认是单个接口问题还是全局普遍现象
  • 建议:优先修改 DTO 定义,其次再考虑全局序列化配置

快速处理思路

如果不想写配置类,直接在字段声明时赋值是最快的方式。

private List<String> items = new ArrayList<>();

如果需要全局生效,创建一个配置类实现定制器接口。

Spring Boot 配置 JSON 返回空集合而不是 null 怎么做?

为什么会这样

Spring Boot 默认使用 Jackson 库处理 JSON 序列化。当 Java 对象中的集合字段为 null 时,Jackson 默认会将其序列化为 JSON 的 null 值。前端 JavaScript 代码通常期望遍历数组,遇到 null 可能会抛出类型错误。

分步处理

1. 检查 DTO 类:找到返回给前端的數據对象,查看集合字段是否初始化。

2. 修改字段定义:将 private List<T> list; 改为 private List<T> list = new ArrayList<>();

Spring Boot 配置 JSON 返回空集合而不是 null 怎么做?

3. 全局配置(可选):若无法修改所有 DTO,创建配置类实现 Jackson2ObjectMapperBuilderCustomizer,在构建 ObjectMapper 时注册自定义序列化逻辑。

怎么验证是否生效

使用 curl 或 Postman 请求接口,检查响应体中该字段的值。确认显示为 [] 而不是 null

Spring Boot 配置 JSON 返回空集合而不是 null 怎么做?

常见坑

1. Lombok 注解:使用 @Data@NoArgsConstructor 时,确保不会覆盖字段的初始值。

2. 反序列化影响:全局配置可能影响反序列化行为,需测试 POST 请求是否正常。

3. 性能开销:全局自定义序列化器会增加少量处理时间,公开资料中没有看到可靠的量化数据,但在高并发场景需留意。