我试图序列化和反序列化数据库中的双向关系。我已经使用 @JsonBackReference 和 @JsonManagedReference 来做到这一点......我有 2 个表(类):Question 和 QuestionGroup。一个问题组可以有多个问题,并且许多问题可以是一个问题组的一部分。当我尝试发送 GET 请求时(同时使用托管和反向引用注释正确的字段),我得到的响应被完美地序列化。正是我想要的方式。但是当我尝试发送 POST 请求时,我在标题中收到错误:
415 Unsupported Media Type
.
这是我的 IDE 中的完整错误消息:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot handle managed/back reference 'defaultReference': back reference type (`java.util.List<com.ent.quiz.entity.Question>`) not compatible with managed type (com.ent.quiz.entity.Question)
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot handle managed/back reference 'defaultReference': back reference type (`java.util.List<com.ent.quiz.entity.Question>`) not compatible with managed type (com.ent.quiz.entity.Question)
无论 POST 请求如何,我都会得到“完美”响应:
`{
"id": 1,
"question": "PITANJE1 GRUPA1",
"question_order": 0,
"questionGroup": {
"id": 1,
"group_name": "GRUPA1"
}
}`
将 JsonManaged 和 BackReference 更改为 JsonIgnore 后,我丢失了 QuestionGroup 对象。我尝试使用 @JsonIdentityInfo() 但它也失败了(在 POST 请求有效的意义上失败,但序列化忽略了 QuestionGroup)。
我该如何解决此问题,以便保留所需的响应,但解决 415 不支持的媒体类型。
这是我的代码:
public class Question {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String question;
private Integer question_order;
@ManyToOne
@JsonManagedReference
private QuestionGroup questionGroup;
}
public class QuestionGroup {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String group_name;
@OneToMany(mappedBy = "questionGroup")
@JsonBackReference
private List<Question> questions;
}
当我查看代码时,我注意到我没有删除 @JsonManaged 和 @JsonBack 引用,并实现了 @JsonManaged-Back 引用和 @JsonIdentityInfo ...一旦我删除了托管和反向引用,一切就开始按预期工作。