为什么 Spring Data REST 中的对多关联资源不支持 DELETE?

Why is DELETE not supported on to-many-association resources in Spring Data REST?

我正在使用 Spring 数据 REST。我正在尝试解除集合关联与实体(项目)的绑定。即 - 项目的 属性 属于 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;
    …
}

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

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

我们通常建议简单地将媒体类型为 text/uri-list 的空主体放入关联资源以清空关联,因为这在语义上更正确。将其视为截断和删除数据库之间的区别 table。

如果您认为应该改变并且有充分的理由支持您的请求,请随时在我们的 JIRA.

中提交申请