使用Lombok初始化一个嵌套的Bean
我正在尝试让Lombok在一个嵌套的bean类上工作。但是每次都会遇到空指针异常。
我的父bean类定义为:
import java.io.Serializable;
import lombok.Builder;
import org.springframework.data.annotation.Id;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class StudentData implements Serializable {
/**
*
*/
private static final long serialVersionUID = -432700976003393778L;
@Id
@JsonIgnore
private String id;
PersonalInfo personalInfo;
@JsonIgnore
private String grade;
@JsonIgnore
private String attendance;
}
而嵌套的bean类是:
import java.io.Serializable;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class PersonalInfo implements Serializable {
/**
*
*/
private static final long serialVersionUID = -432700976003393778L;
private String firstName;
private String lastName;
private String ssn;
private String address;
private String zipCode;
}
每当我在我的JUnit测试中尝试给嵌套bean类赋值时,就会出现以下错误:
Cannot invoke "com.test.student.dao.PersonalInfo.setFirstName(String)" because the return value of "com.test.student.dao.StudentData.getPersonalInfo()" is null
我尝试了Lombok的许多注解,但都没有用。
解决方案
你从来没有创建PersonalInfo的对象。所以当你创建StudentData的对象时,PersonalInfo就是null。
最简单的修复:(这不需要对你的类做任何修改)
StudentData student = new StudentData();
student.setPersonalInfo(new PersonalInfo());
student.getPersonalInfo().setFirstName("John");
或者你可以执行以下任意一种:
- 初始化PersonalInfo
@Getter
@Setter
@ToString
public class StudentData implements Serializable {
private static final long serialVersionUID = -432700976003393778L;
@Id
@JsonIgnore
private String id;
private PersonalInfo personalInfo = new PersonalInfo(); // ← initialize here
@JsonIgnore
private String grade;
@JsonIgnore
private String attendance;
}
- 在构造函数中初始化
public StudentData() {
this.personalInfo = new PersonalInfo();
}
- 使用Builder.Default
@Getter
@Setter
@ToString
@Builder
public class StudentData implements Serializable {
private String id;
@Builder.Default
private PersonalInfo personalInfo = new PersonalInfo();
private String grade;
private String attendance;
}
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。