当我尝试将 jpa 存储库中的对象添加到列表时出现 NullPointerException
NullPointerException when i try to add a object from a jpa repository to a list
我想获取所有项目,其中 person
为空。每次我调用端点 a 时,这条线 emptyProjects.add(project);
都会得到一个 NullPointerException
。也许是因为 JsonBackReference
?
如果是这样,有什么方法可以获取人员列表为空的项目列表?
项目 Class:
package com.example.api.model;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@Entity
@Table(name = "project")
public class Project {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
private String name;
@ManyToMany(mappedBy = "projectList")
@JsonBackReference
private List<Person> person;
public Project(){}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Person> getPerson() {
return person;
}
public void setPerson(List<Person> person) {
this.person = person;
}
}
我正在处理的方法:
@GetMapping("/project/empty")
public ResponseEntity getEmptyProjects(){
List <Project> emptyProjects = null;
for (int i = 0; i <= projectRepo.findAll().size(); i++){
Project project = projectRepo.findAll().get(i);
emptyProjects.add(project);
if (project.getPerson().isEmpty() == true){
emptyProjects.add(project);
}
}
return ResponseEntity.ok(emptyProjects);
}
谢谢!
您没有初始化列表,所以您遇到了 NullPointerException,因为您正试图对空对象调用方法。替换此行:
List <Project> emptyProjects = null;
有了这个
List <Project> emptyProjects = new ArrayList<>();
此外,无需为循环的每次迭代调用数据库。最好将结果保存在列表中 List<Project> allProjects = projectRepo.findAll()
并循环遍历此列表以获得更好的性能
您的列表声明为 null 意味着没有为该 emptyProjects
分配内存地址,因此在访问该列表时,您会收到 NPE
错误。此外,在您的循环条件和访问 findAll()
resultSet 的元素中,您不必要地多次调用该方法,这是不正确的,并且您的条件检查 for (int i = 0; i <= projectRepo.findAll().size(); i++){
是错误的。检查更正后的代码:
@GetMapping("/project/empty")
public ResponseEntity getEmptyProjects(){
List <Project> emptyProjects = new ArrayList<>();
List <Project> resultSet=projectRepo.findAll();
for (int i = 0; i < resultSet.size(); i++){
Project project = resultSet.get(i);
emptyProjects.add(project);
if (project.getPerson().isEmpty() == true){
emptyProjects.add(project);
}
}
return ResponseEntity.ok(emptyProjects);
}
如@Germano Mosconi 所述,您必须初始化 emptyProjects。
// Fetch all projects
List<Project> allProjects = projectRepo.findAll();
// Initialize empty project list here
List<Project> emptyProjects = new ArrayList<>();
// Filter projects having empty person.
for (Project project : allProjects) {
if (null == project.getPerson()) {
emptyProjects.add(project);
}
}
我想获取所有项目,其中 person
为空。每次我调用端点 a 时,这条线 emptyProjects.add(project);
都会得到一个 NullPointerException
。也许是因为 JsonBackReference
?
如果是这样,有什么方法可以获取人员列表为空的项目列表?
项目 Class:
package com.example.api.model;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@Entity
@Table(name = "project")
public class Project {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
private String name;
@ManyToMany(mappedBy = "projectList")
@JsonBackReference
private List<Person> person;
public Project(){}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Person> getPerson() {
return person;
}
public void setPerson(List<Person> person) {
this.person = person;
}
}
我正在处理的方法:
@GetMapping("/project/empty")
public ResponseEntity getEmptyProjects(){
List <Project> emptyProjects = null;
for (int i = 0; i <= projectRepo.findAll().size(); i++){
Project project = projectRepo.findAll().get(i);
emptyProjects.add(project);
if (project.getPerson().isEmpty() == true){
emptyProjects.add(project);
}
}
return ResponseEntity.ok(emptyProjects);
}
谢谢!
您没有初始化列表,所以您遇到了 NullPointerException,因为您正试图对空对象调用方法。替换此行:
List <Project> emptyProjects = null;
有了这个
List <Project> emptyProjects = new ArrayList<>();
此外,无需为循环的每次迭代调用数据库。最好将结果保存在列表中 List<Project> allProjects = projectRepo.findAll()
并循环遍历此列表以获得更好的性能
您的列表声明为 null 意味着没有为该 emptyProjects
分配内存地址,因此在访问该列表时,您会收到 NPE
错误。此外,在您的循环条件和访问 findAll()
resultSet 的元素中,您不必要地多次调用该方法,这是不正确的,并且您的条件检查 for (int i = 0; i <= projectRepo.findAll().size(); i++){
是错误的。检查更正后的代码:
@GetMapping("/project/empty")
public ResponseEntity getEmptyProjects(){
List <Project> emptyProjects = new ArrayList<>();
List <Project> resultSet=projectRepo.findAll();
for (int i = 0; i < resultSet.size(); i++){
Project project = resultSet.get(i);
emptyProjects.add(project);
if (project.getPerson().isEmpty() == true){
emptyProjects.add(project);
}
}
return ResponseEntity.ok(emptyProjects);
}
如@Germano Mosconi 所述,您必须初始化 emptyProjects。
// Fetch all projects
List<Project> allProjects = projectRepo.findAll();
// Initialize empty project list here
List<Project> emptyProjects = new ArrayList<>();
// Filter projects having empty person.
for (Project project : allProjects) {
if (null == project.getPerson()) {
emptyProjects.add(project);
}
}