目录
前言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());
}
}
截图如下: