为什么Spring Data REST中的to-many-association资源不支持DELETE?

时间:2015-02-23 17:43:30

标签: rest spring-data spring-data-rest

我正在使用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;
    …
}

1 个答案:

答案 0 :(得分:4)

我刚检查了代码,你说得对,我们主动拒绝DELETEMap和集合的请求。理由如下:

Map或集合中的关联绝不能是域模型中的null。将其转换为HTTP资源意味着资源将始终可用,并且在最坏的情况下返回空表示(空JSON数组或空JSON对象)。接受DELETE请求会在逻辑上null域模型中的关系,从而导致与第一个假设相矛盾的状态。

我们通常建议简单地将具有媒体类型text/uri-list的空主体PUT到关联资源,以清空关联,因为它在语义上更正确。请考虑截断和删除数据库表之间的区别。

如果您认为应该更改并且有充分的理由可以提出请求,请随时在我们的JIRA中打开票证。