Lombok 可以理解为一种通过简单注解自动生成方法的工具。
Lombok 使用前需要配置 Lombok 依赖,在 IDEA 里需要下载 Lombok 插件,还需在设置中注解处理器里打开注解处理。
# 代码解释
| 注解 | 作用 | 
|---|---|
@Data | 自动生成  getter 、 setter 、 equals() 、 hashCode() 、 toString()  方法 | 
@NoArgsConstructor | 生成无参构造器( public User() {} ),JPA 实体类必须要有无参构造器 | 
@AllArgsConstructor | 生成含所有字段的构造器(可选) | 
# 扩展用法
| 其他常用 Lombok 注解 | 功能 | 
|---|---|
@Builder | 生成链式构造器模式(适合创建复杂对象) | 
@ToString(exclude = "id") | 生成  toString()  时可排除指定字段(如敏感信息) | 
@Slf4j | 自动注入  private static final Logger log = LoggerFactory.getLogger(...); | 
# 出现问题:明明引入了 Lombok 但是没用
参考:Lombok 注解不生效_lombok 注解不起作用 - CSDN 博客
解决方案:在 IDEA 里创建项目的时候,依赖项先不要选择 Lombok,而是在项目创建完成后手动加入 Lombok 依赖,如下:
<dependency>   | |
<groupId>org.projectlombok</groupId>  | |
<artifactId>lombok</artifactId>  | |
<optional>true</optional>  | |
</dependency> | 
如果要检查 Lombok 是否生效,可以检查生成的字节码,查看是否生成 getter、setter 等函数。
下面是实例:
javap -p target/classes/com/example/demo_mysql/Entity/User.class | 
# 反思
这个问题主要反映在前端发送请求但是 500 错误码,后端报错字段为空。我遇到了很多次这个问题,一开始笃定是 Lombok 失效了,但是检查字节码竟然发现他成功生成了函数。这个时候才开始检查其他方面,发现是 Controller 就写错了,少写了 @RequestBody  和 @RequestParam  。
如果前端传递的是 JSON 格式的请求体,但后端没有使用  @RequestBody  注解,Spring 将无法解析参数。
问题示例:
@PostMapping("/users")  | |
public User createUser(User user) { // ❌ 错误:缺少 @RequestBody  | |
return userService.save(user);  | |
} | 
修正方案:
@PostMapping("/users")  | |
public User createUser(@RequestBody User user) { // ✅ 正确  | |
return userService.save(user);  | |
} | 
关于这个问题,具体也可以看:Controller 内的参数注解使用场景