Java Jackson核心注解使用详解

2025-05-11 14:50

本文主要是介绍Java Jackson核心注解使用详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《JavaJackson核心注解使用详解》:本文主要介绍JavaJackson核心注解的使用,​​Jackson核心注解​​用于控制Java对象与JSON之间的序列化、反序列化行为,简化字段映射...

前言

Java 后端开发中,Jackson 是最常用的 JSON 序列化/反序列化工具之一。Jackson 提供了一系列功能强大的注解,用于精确控制 JSON 与 Java 对象之间的映射逻辑。本文将深入讲解常用的几个核心注解:

  • @JsonProperty:指定字段的 JSON 名称
  • @JsonIgnore:忽略字段序列化/反序列化
  • @JsonInclude:控制字段是否参与序列化(如 null、空集合等)
  • @JsonFormat:格式化日期时间
  • @JsonCreator / @JsonValue:自定义对象的序列化/反序列化逻辑

一、@JsonProperty-指定JSON字段名

默认情况下,Jackson 使用 Java 字段名作为 JSON 字段名。但在前后端字段命名不一致时,可以使用 @JsonProperty 显式指定:

public class User {
    @JsonProperty("user_name")
    private String username;
    // getter/setter
}

输出 JSON:

{
  "user_name": "Tom"
}

二、@JsonIgnore-忽略字段

@JsonIgnore 用于在序列化或反序列化过程中跳过某些字段,比如密码、内部字段等:

public class Account {
    private String username;
    @JsonIgnore
    privaandroidte String password;
    // getter/setter
}

输出 JSON 不包含 password 字段。

三、@JsonInclude-控制是否输出null或空字段

通过 @JsonInclude 可以控制字段是否输出。常见选项:

  • Include.NON_NULL:忽略 null 值
  • Include.NON_EMPTY:忽略 null、空字符串、空集合等
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Product {
    private String name;
    private String description;
}

description 为 null 时不会出现在 JSON 中。

也可以作用于类、字段或全局配置:

@JsonInclude(JsonInclude.Include.NON_EMPTY)
private List<String> tags;

四、@JsonFormat-格式化时间

Java 中的日期类型默认序列化为时间戳。通过 @JsonFormat 可以指定格式和时区:

public class Event {
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date eventTime;
}

输出 JSON 中的日期格式为:"2025-05-06 16:00:00"

五、@JsonCreator/@JsonValue-自定义序列化与反序列化

1. @JsonCreator:构造方法反序列化

当对象没有默认构造器,或你希望控制反序列化逻辑时使用:

public class Currency {
    private String code;
    @JsonCreator
    public Currency(@JsonProperty("code") String code) {
        this.code = code;
    }
    public String getCode() { return code; }
}

2. @JsonValue:自定义序列化值

如果你希望整个对象在序列化时只输出某个字段,可以使用 @JsonValue:

public class Status {
    private final String value;
    public Status(String value) {
        this.value = value;
    }
    @JsonValue
    public String getValue() {
        return value;
    }
}

序列化后将只输出字符串:

"ACTIVE"

六、完整示例

public class User {
    @JsonProperty("user_name")
    private String username;
    @JsonIgnore
    private Standroidring password;
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String email;
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date birthday;
    // getters and setters
}

七、实战项目结构与代码仓库

示例接口返回序列化结果

@RestController
public class UserController {
    @GetMapping("/user")
    public User getUser() {
        User usejsr = new User();
        user.setUsername("alice");
        user.setPassword("123456");
        user.setEmail(null);
        user.setBirthday(new Date());
        return user;
    }
}

八、总结

Jackson 提供的注解使我们可以精准控制对象与 JSON 的js映射行为。合理使用 @JsonProperty@JsonIgnore@JjavascriptsonInclude 等注解,不仅可以满足前后端字段差异需求,还能提升代码的可读性与可维护性。

这些注解在实际开发中广泛应用,是每一位 Java 开发者都应掌握的重要工具。如果你希望构建更强大的 JSON 数据模型控制体系,Jackson 注解体系是你的得力助手。

以上就是Java Jackson核心注解使用详解的详细内容,更多关于Java Jackson核心注解的资料请关注China编程(www.chinasem.cn)其它相关文章!

这篇关于Java Jackson核心注解使用详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154570

相关文章

MySQL中隔离级别的使用详解

《MySQL中隔离级别的使用详解》:本文主要介绍MySQL中隔离级别的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录引言undo log的作用MVCC的实现有以下几个重要因素如何根据这些因素判断数据值?可重复读和已提交读区别?串行化隔离级别的实现幻读和可

Python解决雅努斯问题实例方案详解

《Python解决雅努斯问题实例方案详解》:本文主要介绍Python解决雅努斯问题实例方案,雅努斯问题是指AI生成的3D对象在不同视角下出现不一致性的问题,即从不同角度看物体时,物体的形状会出现不... 目录一、雅努斯简介二、雅努斯问题三、示例代码四、解决方案五、完整解决方案一、雅努斯简介雅努斯(Janu

使用Python和SQLAlchemy实现高效的邮件发送系统

《使用Python和SQLAlchemy实现高效的邮件发送系统》在现代Web应用中,邮件通知是不可或缺的功能之一,无论是订单确认、文件处理结果通知,还是系统告警,邮件都是最常用的通信方式之一,本文将详... 目录引言1. 需求分析2. 数据库设计2.1 User 表(存储用户信息)2.2 CustomerO

Spring Validation中9个数据校验工具使用指南

《SpringValidation中9个数据校验工具使用指南》SpringValidation作为Spring生态系统的重要组成部分,提供了一套强大而灵活的数据校验机制,本文给大家介绍了Spring... 目录1. Bean Validation基础注解常用注解示例在控制器中应用2. 自定义约束验证器定义自

通过C#获取Excel单元格的数据类型的方法详解

《通过C#获取Excel单元格的数据类型的方法详解》在处理Excel文件时,了解单元格的数据类型有助于我们正确地解析和处理数据,本文将详细介绍如何使用FreeSpire.XLS来获取Excel单元格的... 目录引言环境配置6种常见数据类型C# 读取单元格数据类型引言在处理 Excel 文件时,了解单元格

MySQL连接池(Pool)常用方法详解

《MySQL连接池(Pool)常用方法详解》本文详细介绍了MySQL连接池的常用方法,包括创建连接池、核心方法连接对象的方法、连接池管理方法以及事务处理,同时,还提供了最佳实践和性能提示,帮助开发者构... 目录mysql 连接池 (Pool) 常用方法详解1. 创建连接池2. 核心方法2.1 pool.q

Java对接Dify API接口的完整流程

《Java对接DifyAPI接口的完整流程》Dify是一款AI应用开发平台,提供多种自然语言处理能力,通过调用Dify开放API,开发者可以快速集成智能对话、文本生成等功能到自己的Java应用中,本... 目录Java对接Dify API接口完整指南一、Dify API简介二、准备工作三、基础对接实现1.

9个SpringBoot中的自带实用过滤器使用详解

《9个SpringBoot中的自带实用过滤器使用详解》在SpringBoot应用中,过滤器(Filter)是处理HTTP请求和响应的重要组件,SpringBoot自带了许多实用的过滤器,如字符编码,跨... 目录1. CharacterEncodingFilter - 字符编码过滤器功能和配置手动配置示例2

Redis持久化机制之RDB与AOF的使用

《Redis持久化机制之RDB与AOF的使用》:本文主要介绍Redis持久化机制之RDB与AOF的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis持久化机制-RDB与AOF一、RDB持久化机制1、RDB简介2、RDB的工作原理3、RDB的优缺点4

Spring Boot Controller处理HTTP请求体的方法

《SpringBootController处理HTTP请求体的方法》SpringBoot提供了强大的机制来处理不同Content-Type​的HTTP请求体,这主要依赖于HttpMessageCo... 目录一、核心机制:HttpMessageConverter​二、按Content-Type​处理详解1.