为什么 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;
…
}
我刚刚检查了代码,你是对的,我们主动拒绝 DELETE
对 Map
和集合的请求。理由如下:
领域模型中 Map
或集合的关联绝不能是 null
。将其转换为 HTTP 资源意味着该资源将始终可用,并且在最坏的情况下 return 为空表示(空 JSON 数组或空 JSON 对象)。接受 DELETE
请求在逻辑上会 null
域模型中的关系,从而导致与第一个假设相矛盾的状态。
我们通常建议简单地将媒体类型为 text/uri-list
的空主体放入关联资源以清空关联,因为这在语义上更正确。将其视为截断和删除数据库之间的区别 table。
如果您认为应该改变并且有充分的理由支持您的请求,请随时在我们的 JIRA.
中提交申请
我正在使用 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;
…
}
我刚刚检查了代码,你是对的,我们主动拒绝 DELETE
对 Map
和集合的请求。理由如下:
领域模型中 Map
或集合的关联绝不能是 null
。将其转换为 HTTP 资源意味着该资源将始终可用,并且在最坏的情况下 return 为空表示(空 JSON 数组或空 JSON 对象)。接受 DELETE
请求在逻辑上会 null
域模型中的关系,从而导致与第一个假设相矛盾的状态。
我们通常建议简单地将媒体类型为 text/uri-list
的空主体放入关联资源以清空关联,因为这在语义上更正确。将其视为截断和删除数据库之间的区别 table。
如果您认为应该改变并且有充分的理由支持您的请求,请随时在我们的 JIRA.
中提交申请