我正在使用spring数据休息。当我尝试使用带有application / json的post方法使用以下对象创建资源时,关联资源没有绑定,尽管它们已经存在于db
中{
screeName : 'adsaf',
screenType : {
screenTypeId : 1,
screenTypeName : 'Fixed'
}
}
为什么呢?除了单独设置关联之外,还有其他方法可以完成此任务吗?我问这个问题,因为如果我在控制器中手动接收此表单并使用ObjectMapper反序列化然后保存此对象,则将设置所有关联。那为什么它不会发生在春季数据休息
答案 0 :(得分:1)
Spring Data REST works包含资源链接,因此您必须将有效负载更改为以下内容:
POST http://localhost:8080/api/screens
{
"screenName": "adsaf",
"screenType": "http://localhost:8080/api/screenTypes/1"
}
如果您在发布ScreenType
对象时也需要保存Screen
,则应关闭ScreenType
存储库的导出:
@RepositoryRestResource(exported = false)
public interface ScreenTypeRepo extends JpaRepository<ScreenType, ...> {
}
并将级联(至少PERSIST
)添加到screenType
实体中的Screen
字段:
public class Screen {
//...
@ManyToOne(cascade = CascadeType.PERSIST)
ScreenType screenType;
}
这意味着ScreenType
将由Screen
管理。在这种情况下,您可以使用这样的有效负载:
POST http://localhost:8080/api/screens
{
"screenName": "adsaf",
"screenType": {
"screenTypeName": "Fixed"
}
}
与Screen同时创建一个新的ScreenType。
答案 1 :(得分:0)
这可以使用Custom HttpMessageConverter完成。检查以下主题。