使用Lombok初始化一个嵌套的Bean

编程语言 2026-07-12

我正在尝试让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");

或者你可以执行以下任意一种:

  1. 初始化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;
}
  1. 在构造函数中初始化
public StudentData() {
    this.personalInfo = new PersonalInfo();
}
  1. 使用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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章