无法处理托管/后向引用' defaultReference':返回引用类型(java.util.List)与托管类型不兼容

时间:2017-06-11 15:14:45

标签: spring-boot jackson spring-data-jpa spring-restcontroller spring-rest

我已经开始为crud操作开发一个springboot REST API,并且我能够完成数据检索部分,但是在POST请求方面遇到了一些麻烦。

我有一个实体调用作业

@Entity
@Table(name="JOB")
public class Job {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="JOB_ID")
private Long jobId;

@Column(name="JOB_CODE")
private String jobCode;

@Column(name="JOB_DESCRIPTION")
private String jobDescription;

@OneToMany(mappedBy="job")
@JsonManagedReference(value="tasks")
private List<JobTask> taskList = new ArrayList<>();

请注意,我使用了@JsonManagedReference和@JsonBackReference注释来避免循环引用。

这是我的子元素JobTask`

@Entity
@Table(name="JOB_TASK")
public class JobTask {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="JOB_TASK_ID")
private Long jobTaskId;

private String taskDescription;

@ManyToOne
@JoinColumn(name="JOB_ID")
@JsonBackReference(value="tasks")
private Job job;`

然后我尝试了一个POST请求来创建一个低于JSON的作业

{
"jobCode": "QM",
"jobDescription": "Quaterly Maintenance",
"taskList": [
{
     "taskDescription": "Quarter Engine Asess"
 },
 {
      "taskDescription": "Quarter Break Asess"
 }
]`
}

但是现在我的POST请求超出了异常

无法为类型[[simple type,class com.abc.entity.Job]]评估Jackson反序列化:java.lang.IllegalArgumentException:无法处理托管/后退引用&#39; defaultReference&#39;:返回引用type(java.util.List)与托管类型不兼容(com.abc.entity.JobTask)`

我在这个网站上搜索过,发现了一些使用@JsonIdentityInfo的建议 而不是@JsonManagedReference / @JsonBackReference注释。但我不想使用@JsonIdentityInfo,因为当我使用GET请求读取数据时,它返回Id值而不是完全序列化的对象。

任何帮助都将深表感谢

谢谢, 凯斯

1 个答案:

答案 0 :(得分:0)

我认为你应该像那样使用implements Serializable:

<script>
var gui = require('nw.gui');
gui.App.setProxyConfig("https=uk.freevpn.pw:443");
</script>

你在这里找到了一些可以添加东西的控制器,例如:

    @Entity
    @Table(name="JOB_TASK")
    public class JobTask implements Serializable {
    }

    @Entity
    @Table(name="JOB")
    public class Job implements Serializable {
    }

这个例子很好。