gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:29:23 33 4
gpt4 key购买 nike

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

}

最佳答案

我刚刚检查了代码,您是对的,我们积极拒绝对 Map 和集合的 DELETE 请求。理由如下:

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

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

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

关于rest - 为什么 DELETE 不支持 Spring Data REST 中的多对多关联资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28679934/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com