当前位置: 首页 > article >正文

如何配置Jackson以忽略Java类中为null或空(empty)的字段

Jackson库提供了@JsonInclude注解和ObjectMapper配置选项,可以用来控制是否在JSON输出中包含null或空值的字段。

默认情况下,Jackson会包含所有字段,不论其值为何。

本教程将展示如何使用Include.NON_NULL来忽略null值字段,以及使用Include.NON_EMPTY来忽略空值字段。

添加依赖项

首先,在你的pom.xml文件中添加以下依赖项:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>LATEST_VERSION</version> <!-- 请替换为Maven中央仓库上的最新版本 -->
</dependency>

此依赖会自动引入jackson-corejackson-annotations

@JsonInclude 注解概览

@JsonInclude注解支持两种主要的配置值:

  • Include.NON_NULL: 只有非null的属性会被包含在JSON中。
  • Include.NON_EMPTY: 只有非空(非null且不为空字符串、集合等)的属性会被包含在JSON中。

该注解可以在属性级别或类级别使用,也可以全局配置ObjectMapper实例。

示例代码
1. 属性级别的@JsonInclude配置

我们可以通过在属性上添加@JsonInclude注解来指定个别字段的行为。

package net.javaguides.jackson.annotations;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;

public class Employee {
    private int id;

    @JsonInclude(Include.NON_NULL)
    private String firstName;

    @JsonInclude(Include.NON_EMPTY)
    private String lastName;

    public Employee(int id, String firstName, String lastName) {
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
    }

    // Getters and setters...
}
2. 类级别的@JsonInclude配置

我们还可以通过在类上添加@JsonInclude注解来为整个类设置统一的行为。

package net.javaguides.jackson.annotations;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;

@JsonInclude(Include.NON_NULL)
public class Employee {
    private int id;
    private String firstName;

    @JsonInclude(Include.NON_EMPTY)
    private String lastName;

    public Employee(int id, String firstName, String lastName) {
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
    }

    // Getters and setters...
}
3. 使用ObjectMapper全局配置

你也可以在ObjectMapper实例上全局地配置这一行为。请注意,如果你同时设置了Include.NON_NULLInclude.NON_EMPTY,后者将会覆盖前者。

ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
// 或者使用 Include.NON_EMPTY
// mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
测试代码

这里是一个完整的测试示例,它演示了上述配置的效果:

package net.javaguides.jackson.annotations;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.annotation.JsonInclude.Include;

public class JsonIncludeAnnotationTest {
    public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        mapper.setSerializationInclusion(Include.NON_NULL); // 或者 NON_EMPTY
        mapper.enable(SerializationFeature.INDENT_OUTPUT);

        Employee employee = new Employee(10, null, "");
        String result = mapper.writeValueAsString(employee);

        System.out.println(result);
    }
}

运行上述代码后,如果firstNamenulllastName是空字符串,那么最终的JSON输出将只包含id字段。

注意:在最新的Jackson版本中,setSerializationInclusion方法已经被弃用,推荐使用setDefaultInclusionwriterWithDefaultPrettyPrinter().with(...). 例如:

ObjectMapper mapper = new ObjectMapper();
mapper.setDefaultInclusion(JsonInclude.Value.construct(Include.NON_NULL, Include.NON_EMPTY));

这将确保你的项目遵循最佳实践,并与未来的Jackson版本兼容。


http://www.kler.cn/a/429287.html

相关文章:

  • 在 Fluent 网格划分中使用薄网格特征
  • 构建优雅、高效的 Nodejs 命令行工具 - Archons
  • nginx 配置域名前缀访问 react 项目
  • GraphRAG如何使用ollama提供的llm model 和Embedding model服务构建本地知识库
  • springcloud中的Feign调用
  • 网站收录入口提交的方法有哪些(网站收录的方式都有哪些)
  • 避大坑!Vue3中reactive丢失响应式的问题
  • guava 整合springboot 自定义注解实现接口鉴权调用保护
  • 题海拾贝:力扣 231. 2 的幂
  • 使用Python和OpenGL实现3D立方体的交互式显示
  • 康托展开和逆康托展开
  • java-数组—acwing
  • 【C语言】数据库事物的ACID属性
  • 在Ubuntu上使用IntelliJ IDEA:开启你的Java开发之旅!
  • osi七层模型
  • 电子商务人工智能指南 6/6 - 人工智能生成的产品图像
  • Linux DNS之进阶篇bind-chroot企业级部署方式
  • Electron小案例
  • 超详细搭建PhpStorm+PhpStudy开发环境
  • git提交时出现merge branch main of xxx
  • Win11 配置 TeXstudio 编辑器教程
  • C# Winform飞机大战小游戏源码
  • docker的网络类型和使用方式
  • 【计算机图形学】实验2:橡皮筋技术及拾取操作
  • 运维排错系列:Excel上传失败,在剪切板有大量信息。是否保存其内容...
  • 基于yolov10的反光衣和安全帽检测系统,支持图像检测,视频检测和实时摄像检测功能(pytorch框架,python源码)