Spring Boot+Maven项目中Lombok @Data注解构造函数未定义问题
Lombok @Data注解未生成带参构造函数的原因
问题场景
在基于Maven的Spring Boot项目中使用Lombok,开发IDE为VSCode。最初编写如下代码可正常运行:
@Getter @AllArgsConstructor public class FooModel { private String name; }
切换为@Data注解后代码变为:
@Data public class FooModel { private String name; }
此时出现编译错误:The constructor FooModel(String) is undefined
原因解析
@Data注解整合了@Getter、@Setter、@ToString、@EqualsAndHashCode、@RequiredArgsConstructor的功能,但不会自动生成包含所有字段的带参构造函数,默认仅生成无参构造函数。@RequiredArgsConstructor只会生成包含final修饰字段,或被@NonNull注解标记字段的构造函数。你的name字段既不是final也没有@NonNull注解,因此不会生成对应带参构造。- 之前使用的
@AllArgsConstructor是专门生成包含所有字段的带参构造函数,切换为@Data后失去了这个注解的支持,自然找不到对应的构造函数。
解决办法
如果需要保留带参构造函数,可选择以下两种方式:
- 给字段添加
final修饰符,触发@RequiredArgsConstructor生成带参构造:
@Data public class FooModel { private final String name; }
- 在
@Data基础上额外添加@AllArgsConstructor注解:
@Data @AllArgsConstructor public class FooModel { private String name; }
内容的提问来源于stack exchange,提问作者C_Z_
相关产品推荐
相关产品推荐

