Spring boot 无法处理托管/反向引用';defaultReference';:反向引用类型(java.util.List)与托管类型不兼容
我已经开始为crud操作开发springboot REST API,并且我能够完成数据检索部分,但是在POST请求中遇到了一些问题 我有一个实体叫JobSpring boot 无法处理托管/反向引用';defaultReference';:反向引用类型(java.util.List)与托管类型不兼容,spring-boot,jackson,spring-data-jpa,spring-restcontroller,spring-rest,Spring Boot,Jackson,Spring Data Jpa,Spring Restcontroller,Spring Rest,我已经开始为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
@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<>();
然后我尝试了一个POST请求,用下面的JSON创建一个作业`
{
"jobCode": "QM",
"jobDescription": "Quaterly Maintenance",
"taskList": [
{
"taskDescription": "Quarter Engine Asess"
},
{
"taskDescription": "Quarter Break Asess"
}
]`
}
然而,现在我得到以下的职位申请例外`
无法评估类型[[简单类型,类com.abc.entity.Job]]的Jackson反序列化:java.lang.IllegalArgumentException:无法处理托管/反向引用“defaultReference”:反向引用类型(java.util.List)与托管类型(com.abc.entity.JobTask)不兼容`
我在这个网站上搜索了一下,找到了一些使用@JsonIdentityInfo的建议
而不是@JsonManagedReference/@JsonBackReference注释。但我不想使用@JsonIdentityInfo,因为当我使用GET请求读取数据时,它会返回一个Id值,而不是完全序列化的对象
任何帮助都将不胜感激
谢谢,
Keth我认为您应该像这样使用可序列化的工具:
@Entity
@Table(name="JOB_TASK")
public class JobTask implements Serializable {
}
@Entity
@Table(name="JOB")
public class Job implements Serializable {
}
你可以在这里找到控制器来添加一些东西看看这个例子:
@RestController
@RequestMapping("/pays")
public class PaysController {
@Autowired
IManagerPays iManagerPays;
@RequestMapping(method = RequestMethod.POST)
public Pays addPays(@RequestBody Pays pays) {
return iManagerPays.addPays( pays);
}
}
@Service
public class ManagerPays implements IManagerPays {
@Autowired
private RepositoryPays repositorypays;
@Override
public Pays addPays(Pays pays) {
return repositorypays.save(pays);
}
}
@Entity
@Table(name="ctr_pays")
public class Pays {
@Id
@GeneratedValue
private Integer idPays;
private String nomPays;
@OneToMany(mappedBy="pays")
private List<Ville> villes;
public Pays(){
}
//getter and setter
}
@RestController
@请求映射(“/pays”)
公共类工资控制器{
@自动连线
IManagerPays IManagerPays;
@RequestMapping(method=RequestMethod.POST)
公共支付addPays(@RequestBody Pays-Pays){
返回iManagerPays.addPays(支付);
}
}
@服务
公共类ManagerPays实现iManager Pays{
@自动连线
私人回购支付回购支付;
@凌驾
公共支付加支付(Pays Pays){
返回回购支付。保存(支付);
}
}
@实体
@表(name=“ctr_pays”)
公共课付费{
@身份证
@生成值
私人整数日;
私人支付;
@OneToMany(mappedBy=“支付”)
私人名单;
公帑{
}
//接二连三
}
这个示例很好。我认为您应该使用可序列化的实现,如下所示:
@Entity
@Table(name="JOB_TASK")
public class JobTask implements Serializable {
}
@Entity
@Table(name="JOB")
public class Job implements Serializable {
}
你可以在这里找到控制器来添加一些东西看看这个例子:
@RestController
@RequestMapping("/pays")
public class PaysController {
@Autowired
IManagerPays iManagerPays;
@RequestMapping(method = RequestMethod.POST)
public Pays addPays(@RequestBody Pays pays) {
return iManagerPays.addPays( pays);
}
}
@Service
public class ManagerPays implements IManagerPays {
@Autowired
private RepositoryPays repositorypays;
@Override
public Pays addPays(Pays pays) {
return repositorypays.save(pays);
}
}
@Entity
@Table(name="ctr_pays")
public class Pays {
@Id
@GeneratedValue
private Integer idPays;
private String nomPays;
@OneToMany(mappedBy="pays")
private List<Ville> villes;
public Pays(){
}
//getter and setter
}
@RestController
@请求映射(“/pays”)
公共类工资控制器{
@自动连线
IManagerPays IManagerPays;
@RequestMapping(method=RequestMethod.POST)
公共支付addPays(@RequestBody Pays-Pays){
返回iManagerPays.addPays(支付);
}
}
@服务
公共类ManagerPays实现iManager Pays{
@自动连线
私人回购支付回购支付;
@凌驾
公共支付加支付(Pays Pays){
返回回购支付。保存(支付);
}
}
@实体
@表(name=“ctr_pays”)
公共课付费{
@身份证
@生成值
私人整数日;
私人支付;
@OneToMany(mappedBy=“支付”)
私人名单;
公帑{
}
//接二连三
}
这个例子很好。hi@Mohamed Elgarnaoui,感谢您的回复。我试过了,但没有成功。顺便问一下,实现可序列化接口和Jackson反序列化功能背后的理论是什么?Hi@Mohamed Elgarnaoui,感谢您的回复。我试过了,但没有成功。顺便问一下,实现可序列化接口和Jackson反序列化功能背后的理论是什么