我正在使用Spring Data REST。我试图从实体(项目)解除绑定关联。 ie - 项目的属性属于List
类型。我想删除List
。
为此,我使用DELETE方法:
curl -X DELETE …/categories/54ea0bcf27a2fb1b4641083a/fixedParentCategories
这给了我一个405 Method not allowed
错误代码。但是,它适用于单值关联(当它不是List
类型时)。 documentation清楚地列出DELETE
作为关联的受支持方法。我想知道是否有办法解决这个问题。此外,我尝试使用PUT
(Content-Type:text / uri-list)和空体,并且它提供了有关缺少请求体的错误。关于这个协会的其他操作都运行良好 - 我能够将项目添加到此集合等。
我的实体看起来像这样:
@Document
public class Category {
@DBRef(lazy = true)
private List<Category> fixedParentCategories;
…
}
答案 0 :(得分:4)
我刚检查了代码,你说得对,我们主动拒绝DELETE
对Map
和集合的请求。理由如下:
域Map
或集合中的关联绝不能是域模型中的null
。将其转换为HTTP资源意味着资源将始终可用,并且在最坏的情况下返回空表示(空JSON数组或空JSON对象)。接受DELETE
请求会在逻辑上null
域模型中的关系,从而导致与第一个假设相矛盾的状态。
我们通常建议简单地将具有媒体类型text/uri-list
的空主体PUT到关联资源,以清空关联,因为它在语义上更正确。请考虑截断和删除数据库表之间的区别。
如果您认为应该更改并且有充分的理由可以提出请求,请随时在我们的JIRA中打开票证。