为什么关联资源没有约束力

时间:2017-08-13 12:41:55

标签: spring-data-rest

我正在使用spring数据休息。当我尝试使用带有application / json的post方法使用以下对象创建资源时,关联资源没有绑定,尽管它们已经存在于db

{
screeName : 'adsaf',
screenType : {
   screenTypeId : 1,
   screenTypeName : 'Fixed'
}
}

为什么呢?除了单独设置关联之外,还有其他方法可以完成此任务吗?我问这个问题,因为如果我在控制器中手动接收此表单并使用ObjectMapper反序列化然后保存此对象,则将设置所有关联。那为什么它不会发生在春季数据休息

2 个答案:

答案 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完成。检查以下主题。

Creating Resource with references using spring data rest