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

Lombok 与 Jackson 注解详解(基础 + 深入)

Lombok 与 Jackson 注解详解(基础 + 深入)

✅ 一、完整示例类

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class User {private String name;private Integer age;private List<String> roles;
}

🪧 二、Lombok 注解详解

1. @Data

📌 作用

自动为类生成:

  • getter/setter 方法
  • toString() 方法
  • equals() 和 hashCode() 方法
  • requiredArgsConstructor 构造器(为 final 字段或 @NonNull 字段生成构造器)
📌 示例
@Data
public class User {private String name;private int age;
}
等价于
public class User {private String name;private int age;public String getName() { return name; }public void setName(String name) { this.name = name; }public int getAge() { return age; }public void setAge(int age) { this.age = age; }@Overridepublic boolean equals(Object o) { ... }@Overridepublic int hashCode() { ... }@Overridepublic String toString() { ... }
}

2. @Builder

📌 作用

实现 Builder 模式,用于优雅地构造对象,特别适合字段多的类,避免构造函数参数混乱。

📌 示例
@Builder
public class User {private String name;private int age;
}
构建对象
User user = User.builder().name("Tom").age(25).build();

注意:默认 @Builder 生成的是 静态内部类,使用 类名.builder() 调用构建器。

3. @NoArgsConstructor / @AllArgsConstructor

  • 提供无参和全参构造器
  • 可自定义访问级别:@NoArgsConstructor(access = AccessLevel.PROTECTED)

🧩 三、Jackson 注解详解

1. @JsonInclude

控制字段序列化:

@JsonInclude(JsonInclude.Include.NON_NULL)
Include 枚举值
说明
ALWAYS默认行为,全部序列化
NON_NULL排除 null
NON_EMPTY排除 null、空字符串、空集合
NON_DEFAULT排除默认值

2. @JsonIgnore / @JsonProperty

  • @JsonIgnore:排除字段
  • @JsonProperty("json_name"):重命名字段

⚠️ 四、Lombok + Jackson 协同注意事项

问题1:@Builder 不能反序列化

Jackson 不知道如何用 Builder 构造对象

解决方案:

@JsonDeserialize(builder = User.UserBuilder.class)
public class User {}@JsonPOJOBuilder(withPrefix = "")
public static class UserBuilder {}

问题2:默认值失效

默认值不会保留

解决方案:

@Builder.Default
private String name = "default";

📊 五、Jackson 全局配置

ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);

✅ 六、推荐组合模板

用途Lombok 注解Jackson 注解
通用 DTO@Data + @NoArgsConstructor + @AllArgsConstructor@JsonInclude(NON_NULL)
构建器对象@Data + @Builder + @AllArgsConstructor + @NoArgsConstructor@JsonInclude(NON_NULL) + @JsonDeserialize
只读模型@Getter + @AllArgsConstructor@JsonProperty(access = READ_ONLY)
精准序列化控制-@JsonInclude(NON_EMPTY) + @JsonIgnore + @JsonProperty

📘 七、延伸学习建议

方向推荐
Lombok 原理查看 lombok.transform AST 生成逻辑
Jackson 核心阅读 BeanPropertyWriter 与序列化引擎
实战练习Spring Boot 中编写 DTO + JSON 接口

http://www.lqws.cn/news/600625.html

相关文章:

  • day52-硬件学习之RTC及ADC
  • 从零实现在线OJ平台
  • Y-Combinator推导的Golang描述
  • Go语言的Map
  • 编写shell脚本扫描工具,扫描服务器开放了哪些端口(再尝试用python编写一个)
  • java web2(黑马)
  • 7.1_JAVA_其他
  • Excel
  • 【前端】vue工程环境配置
  • 洛谷P1379 八数码难题【A-star】
  • LangChain4j在Java企业应用中的实战指南-3
  • uniapp 中使用路由导航守卫,进行登录鉴权
  • css函数写个loading动画 | css预编译scss使用
  • MAC环境搭建SVN,并将TOMCAT集成到IDEA
  • 地震灾害的模拟
  • Springboot整合高德地图
  • filebeat收集日志到es
  • 大模型MCP技术之一句话安装Hadoop
  • 图神经网络(篇二)-基础知识
  • 安全左移(Shift Left Security):软件安全的演进之路
  • Badoo×亚矩云手机:社交约会革命的“云端心跳加速剂“
  • 计网学习笔记第1章 计算机网络体系结构(灰灰题库)
  • 微信小程序实现table表格
  • vue+three.js 加载模型,并让模型随航线飞行
  • 服务器种类与超融合
  • CSS 安装使用教程
  • mysql的自增id用完怎么办?
  • 【MobaXterm、Vim】使用合集1
  • 多容器应用与编排——AI教你学Docker
  • 单端输入转差分输出