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