415 Java Spring Boot 应用程序中不支持的媒体类型

问题描述 投票:0回答:1

我试图序列化和反序列化数据库中的双向关系。我已经使用 @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;
}
json spring-boot serialization
1个回答
0
投票

当我查看代码时,我注意到我没有删除 @JsonManaged 和 @JsonBack 引用,并实现了 @JsonManaged-Back 引用和 @JsonIdentityInfo ...一旦我删除了托管和反向引用,一切就开始按预期工作。

© www.soinside.com 2019 - 2024. All rights reserved.