【发布时间】:2017-11-13 02:24:06
【问题描述】:
我已经开始为 crud 操作开发 springboot REST API 并且我能够完成数据检索部分,但是在 POST 请求方面遇到了一些问题。
我有一个名为 Job 的实体
@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:无法处理托管/反向引用“defaultReference”:反向引用类型(java.util .List) 与托管类型 (com.abc.entity.JobTask) 不兼容`
我在这个网站上搜索并找到了一些使用@JsonIdentityInfo 的建议 而不是 @JsonManagedReference/ @JsonBackReference 注释。但是我不想使用@JsonIdentityInfo,因为当我使用 GET 请求读取数据时,它会返回一个 Id 值而不是完全序列化的对象。
任何帮助将不胜感激
谢谢, 凯斯
【问题讨论】:
标签: spring-boot jackson spring-data-jpa spring-restcontroller spring-rest