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规范,但有细节需要调整:- 确认
url字段的相对路径正确,且GUID为实际有效的实体ID; - 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
相关产品推荐
相关产品推荐

