【问题标题】:AngularJS and REST: perform DELETE action sending array of many items to removeAngularJS 和 REST:执行删除操作发送要删除的许多项目的数组
【发布时间】:2016-03-02 17:22:50
【问题描述】:

我对 AngularJS 和我的 REST API (Java) 感到困惑。我创建了一个树视图拖放指令,它具有选择其项目然后删除它们的功能,但是当我使用 $resource 执行删除操作时,AngularJS 会覆盖或忽略我发送的请求正文我的选择数组的项目,我该如何解决?还有其他我可以使用的模式吗?也许对 API 进行了一些修改......或者我不知道我想要一些关于这个问题以及如何在后端和前端以最佳方式解决的建议。

更新

JSFiddle:http://bit.ly/1QmG83Z

【问题讨论】:

  • 你能用mcve更新你的帖子吗?
  • 请检查我的答案。

标签: javascript java angularjs rest


【解决方案1】:

据我所知,HTTP 方法DELETE 不需要正文。

您需要在您的 api 中使用一个端点来使用正文中的数组来处理这个“批处理”请求

或者您也可以通过 Angular 对每个资源发起 DELETE 请求,无需任何正文

【讨论】:

  • 但是,如果我的选择包含多个项目(即 50 个),会不会要求太多?
  • @AlexStef,如果出于某种原因,OP 想要原子删除,那么第二个建议往往不是最好的方法。
  • @aribeiro 完全同意,这就是为什么我建议使用(例如)处理完全删除的 url 参数的新端点
【解决方案2】:

也许最好的方法应该是创建一个 POST 请求,您将在其中传递您的数组,然后您可以原子地处理删除:

服务

MyService.$inject = ['$resource'];
function MyService($resource) {
    return $resource('/echo/json', {}, {
        remove: {
           method: 'POST'
        }
});

致电

MyService.remove(categoriesToDelete, function(response) {
    console.log(response);
    // do something after deletion
}

REST 方法示例

@POST
@Path("/json")
@Consumes(MediaType.APPLICATION_JSON)
public Response delete(final String array) {
    // You can convert your input to an array and then process it
    JSONArray responseArray = new JSONArray(array);

    System.out.println("Received input: " + responseArray);

    JSONObject jsonObject = new JSONObject();
    jsonObject.put("Array received", responseArray);

    return Response.status(Status.OK).entity(jsonObject.toString()).build();
}

另外,请查看this post 以获得进一步的启发。

【讨论】:

    【解决方案3】:

    嗯,你给我的所有想法都很棒,并帮助我找到了解决方案,但是阅读所有答案和其他主题,我发现的最佳解决方案是将所有 ID 分组在一个用空格分隔的字符串中,然后我推送到路径变量,并将 DELETE 请求作为单个资源。然后,我的端点将拆分“组合资源”并分别检索它们以执行删除操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-04
      • 1970-01-01
      • 1970-01-01
      • 2019-02-10
      • 2019-08-26
      • 2023-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多