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 内的参数注解使用场景