gpt4 book ai didi

java - NotSerializableException for java.util.Optional with Jackson

转载 作者:行者123 更新时间:2023-12-02 00:13:51 25 4
gpt4 key购买 nike

<分区>

我正在尝试使用 JPA 保存一个实体,但是对于类型为 Optional 的字段得到了 NotSerializableException。我的目标是以 JSON 序列化形式存储自定义对象(此处为 Grade 类型)。

[学生.java]

@Entity
@Table(name = "student")
public class Student {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@Size(min = 3, max = 20)
private String name;

@Lob
private Grade grade;

public Student() {
}

[Grade.java]

public class Grade implements Serializable {

/**
*
*/
private static final long serialVersionUID = 7351334541533041431L;
private Optional<Integer> marks;

public Optional<Integer> getMarks() {
return marks;
}

public void setMarks(Optional<Integer> marks) {
this.marks = marks;
}

@Override
public String toString() {
return "Grade [marks=" + marks + "]";
}

}

[StudentRepository.java]

public interface StudentRepository extends JpaRepository<Student, Long> {

public Student findByName(String name);
}

[StudentRepositoryTest.java]

@RunWith(SpringRunner.class)
@DataJpaTest
public class StudentRepositoryTest {
@Autowired
private TestEntityManager entityManager;

@Autowired
private StudentRepository studentRepository;

@Test
public void whenFindByName_thenReturnEmployee() {

// given
Student alex = new Student("alex");
Grade grade = new Grade();
grade.setMarks(Optional.ofNullable(90));
alex.setGrade(grade);

entityManager.persist(alex);
entityManager.flush();

// when
Student found = studentRepository.findByName(alex.getName());

System.out.println(found);
// then
assertThat(found.getName()).isEqualTo(alex.getName());
}
}

在运行上述测试后,Grade 类中的 marks 字段出现以下异常:

Caused by: java.io.NotSerializableException: java.util.Optional
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at org.hibernate.internal.util.SerializationHelper.serialize(SerializationHelper.java:115)
... 49 more

我包含了以下依赖项以支持 Jackson 的 java8 数据类型:

<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
</dependency>

Spring Boot 版本:2.1.6.RELEASE

在以下位置共享相同的代码:https://github.com/Omkar-Shetkar/spring-repo-test

这里可能缺少什么?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com