【发布时间】:2017-12-25 23:33:17
【问题描述】:
我有一个运行良好的 springboot 应用程序。在其中,我有 2 个实体,项目和情感,具有多对一的关系。一个项目可以有很多做作,但一个做作只能有一个项目。我在“多”一个上设置了@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 中发布的方式:
@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”,“名称”:“项目测试”,“客户”:“客户测试”, "description": "这是一个测试"}' http://localhost:8081/project/add
我该如何解决这个问题?
【问题讨论】:
-
你是什么
POSTing? -
@AnilBhaskar 我更新了我的问题
-
@AnilBhaskar 我的错,我误解了你的要求,我更新了我的问题
标签: java spring spring-boot jackson one-to-many