Java Jackson核心注解使用详解

 更新时间:2025年05月10日 16:54:17   作者:Stay Passion  
这篇文章主要介绍了Java Jackson核心注解的使用,​​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
    private 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 String 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 user = new User();
        user.setUsername("alice");
        user.setPassword("123456");
        user.setEmail(null);
        user.setBirthday(new Date());
        return user;
    }
}

八、总结

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

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

以上就是Java Jackson核心注解使用详解的详细内容,更多关于Java Jackson核心注解的资料请关注脚本之家其它相关文章!

相关文章

  • java实现九宫格游戏

    java实现九宫格游戏

    这篇文章主要为大家详细介绍了java实现九宫格游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • java提供的4种函数式接口

    java提供的4种函数式接口

    这篇文章主要介绍了java提供的4种函数式接口,函数接口是只有一个抽象方法的接口,用作 Lambda 表达式的类型并有且只有一个抽象方法的接口,下文详细内容,需要的小伙伴可以参考一下
    2022-03-03
  • JAVA常用分布式锁Redisson详解

    JAVA常用分布式锁Redisson详解

    Redisson分布式锁通过Lua脚本的原子性、可重入设计、Watchdog 自动续期和Pub/Sub 通知机制,实现了高效的分布式锁管理,本文给大家介绍JAVA常用分布式锁Redisson详解,感兴趣的朋友一起看看吧
    2025-05-05
  • Spring MVC处理参数中的枚举类型通用实现方法

    Spring MVC处理参数中的枚举类型通用实现方法

    这篇文章主要给大家介绍了关于Spring MVC处理参数中的枚举类型通用实现方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
    2018-11-11
  • 解决FeignClient重试机制造成的接口幂等性

    解决FeignClient重试机制造成的接口幂等性

    这篇文章主要介绍了解决FeignClient重试机制造成的接口幂等性问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • java多线程编程之从线程返回数据的两种方法

    java多线程编程之从线程返回数据的两种方法

    从线程中返回数据和向线程传递数据类似。也可以通过类成员以及回调函数来返回数据。但类成员在返回数据和传递数据时有一些区别,下面让我们来看看它们区别在哪
    2014-01-01
  • Spring的Eureka续约(心跳检测)详解

    Spring的Eureka续约(心跳检测)详解

    这篇文章主要介绍了Spring的Eureka续约(心跳检测)详解,eureka client每隔一定的时间,会给eureka server发送心跳,保持心跳,让eureka server知道自己还活着,需要的朋友可以参考下
    2023-11-11
  • java获取当前时间并格式化代码实例

    java获取当前时间并格式化代码实例

    这篇文章主要介绍了java获取当前时间并格式化代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 结合Mybatis聊聊对SQL注入的见解

    结合Mybatis聊聊对SQL注入的见解

    这篇文章主要介绍了结合Mybatis聊聊对SQL注入的见解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • springmvc实现简单的拦截器

    springmvc实现简单的拦截器

    这篇文章主要为大家详细介绍了springmvc实现简单拦截器的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05

最新评论