You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OData JSON批量请求返回200 OK但响应为空,删除操作未生效求助

OData JSON格式批量操作失效排查方案
  • 修正请求头的Content-Type配置
    你当前设置的Content-Type:multipart/mixed; boundary=g1是文本格式批量请求的要求,但JSON格式的OData批量操作(JSON Batch)的请求头应为Content-Type: application/json,不需要multipart相关的边界参数——JSON Batch本身是单一JSON payload,并非多部分请求。

  • 核对JSON Batch的结构规范
    你的请求结构基本符合OData 4.0规范,但有细节需要调整:

    1. 确认url字段的相对路径正确,且GUID为实际有效的实体ID;
    2. DELETE请求无需设置Content-Type请求头(无请求体),可移除子请求里的headers中的Content-Type配置,甚至直接去掉整个headers字段(服务通常会默认识别OData版本)。
      修改后的请求示例:
    {
      "requests": [
        {
          "atomicityGroup": "g1",
          "method": "DELETE",
          "id": "1",
          "url": "ENTITY-1(actual-guid-here)"
        },
        {
          "atomicityGroup": "g1",
          "method": "DELETE",
          "id": "2",
          "url": "ENTITY-1(another-actual-guid-here)"
        }
      ]
    }
    
  • 检查RestTemplate的发送逻辑
    确保RestTemplate发送请求时,正确设置请求体为修正后的JSON字符串,且请求头Content-Type为application/json。示例代码片段:

    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.set("odata-version", "4.0");
    
    String jsonBatchPayload = "{...}"; // 你的修正后的JSON批量请求内容
    HttpEntity<String> requestEntity = new HttpEntity<>(jsonBatchPayload, headers);
    
    ResponseEntity<String> response = restTemplate.exchange(
        "https://DOMAIN/api/data/v9.1/$batch",
        HttpMethod.POST,
        requestEntity,
        String.class
    );
    
  • 验证服务是否支持JSON Batch
    部分OData服务可能默认仅启用传统的multipart批量模式,需确认服务端是否开启了JSON Batch支持。可查看服务元数据文档(/api/data/v9.1/$metadata),或联系服务管理员确认功能状态。

内容的提问来源于stack exchange,提问作者Desichele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 01:22:12