我有一个运行良好的springboot应用程序。在其中,我有2个实体,Project和Affectation,具有多对一的关系。一个项目可以有很多做法,但一个做法只能有一个项目。我在“很多”上设置@JsonBackReference
,在孤独的一个上设置@JsonManagedReference
。 GET / POST请求运行良好。
问题:
目前,当我获得一个项目时,我会收到与该项目相关联的影响,当我得到一个影响时,我没有关于该链接项目的信息。
我想反过来。 我希望当我得到一个矫揉造作时,我会收到链接的项目。为此,我切换了@jsonBackReference
和@JsonManagedReference
:
@Entity
@Table(name="Projet")
public class Projet{
...
@OneToMany(mappedBy = "project")
@JsonBackReference (value="project-affectation")
@Cascade(value = { CascadeType.DELETE, CascadeType.SAVE_UPDATE })
private Set<Affectation> affectations = new HashSet<Affectation>();
...
}
@Entity
@Table(name="Affectation")
public class Affectation{
...
@ManyToOne
@JoinColumn (name="projectid")
@JsonManagedReference (value="project-affectation")
private Project project;
...
}
使用此代码,GET请求很好,我收到了我想要的内容。但是POST一个项目不再起作用了:
无法为类型[[simple type,class com.open.chargeplan.entities.Project]]评估Jackson反序列化:java.lang.IllegalArgumentException:无法处理托管/后向引用'project-affectation':后引用类型(java.util.Set)与托管类型不兼容(com.open.chargeplan.entities.Affectation)
这是我在projectController.java中的POST方式:
@RequestMapping(method = RequestMethod.POST, path="/add")
public ProjectResponse addNewProjet(@RequestBody Project project){
projetRepository.save(project);
return new ProjectResponse(ProjectResponse.Status.OK, project);
}
这就是我要发布的内容:
curl -i -X POST -H'Content-Type:application / json'-d'{“projectid”: “7A93154537”,“name”:“projectTest”,“customer”:“customerTest”, “description”:“这是一个测试”}“http://localhost:8081/project/add
如何解决此问题?
答案 0 :(得分:1)
我通过删除@JsonManagedReference
但保留@JsonBackReference
来解决问题。