详细分析Java中@JsonIgnore注解的基本知识,用于排除特定元素(附Demo)

2025-11-18 02:40:23

目录

前言1. 基本知识2. Demo

前言

基本的Java知识推荐阅读:

java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRUD的功能整理(持续更新)

序列化的相关知识推荐阅读:

java之序列化与反序列化的详细解析(全)详细分析Java中的@JsonFormat注解和@DateTimeFormat注解详细分析Java中的@JsonSerialize注解详细分析Java中的ObjectMapper基本知识(附Demo)

从源码中学习:

1. 基本知识

@JsonIgnore 是 Jackson 序列化库中的注解,用于在序列化和反序列化 JSON 数据时忽略类的某些字段、方法或构造器

这一注解的核心作用是在生成或解析 JSON 数据时排除特定元素,确保数据隐私、减少网络传输量、或忽略不需要的字段

使用的场景有如下:

隐藏敏感数据:对于不想在 JSON 中传输的敏感信息(例如密码)进行隐藏减少数据量:在序列化时排除不必要的信息,减少 JSON 大小避免无限递归:在双向关联的情况下,防止循环依赖导致的无限递归问题 例如,类 A 和类 B 互相引用,可以通过 @JsonIgnore 防止序列化时的死循环

基本的属性如下:

boolean value():默认为 true,表示该注解处于启用状态 当 value 设置为 false 时,注解不会生效。此属性主要用于“混合注解”(Mix-in Annotations),即在不同上下文中动态控制是否忽略某个字段

基本的源码如下:

相关解释如下:

@Target:限制 @JsonIgnore 的作用目标,可以应用于注解、方法、构造器和字段@Retention(RetentionPolicy.RUNTIME):确保 @JsonIgnore 在运行时可用@JacksonAnnotation:表明这是一个 Jackson 特定的注解

2. Demo

基本的Demo如下:

import com.fasterxml.jackson.annotation.JsonIgnore;

import com.fasterxml.jackson.databind.ObjectMapper;

public class User {

private String username;

@JsonIgnore // 忽略该字段

private String password;

private String email;

public User() {}

public User(String username, String password, String email) {

this.username = username;

this.password = password;

this.email = email;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public String getEmail() {

return email;

}

public void setEmail(String email) {

this.email = email;

}

public static void main(String[] args) throws Exception {

// 创建一个 User 对象

User user = new User("码农研究僧", "secret123", "manong@example.com");

// 创建 ObjectMapper 对象

ObjectMapper mapper = new ObjectMapper();

// 将 User 对象转换为 JSON 字符串

String jsonString = mapper.writeValueAsString(user);

System.out.println("序列化后的 JSON 字符串:" + jsonString);

// 将 JSON 字符串反序列化为 User 对象

String jsonInput = "{\"username\":\"码农研究僧\",\"password\":\"secret123\",\"email\":\"manong@example.com\"}";

User deserializedUser = mapper.readValue(jsonInput, User.class);

System.out.println("反序列化后的 User 对象:");

System.out.println("Username: " + deserializedUser.getUsername());

System.out.println("Password: " + deserializedUser.getPassword());

System.out.println("Email: " + deserializedUser.getEmail());

}

}

截图如下:

德国21VS斯洛文21:德国21能否延续统治
迷你西游什么阵容好