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

使用DataWeave生成multipart/mixed负载时移除边界--XX问题

解决Anypoint Request组件中multipart/mixed负载多余边界问题

问题背景

在Anypoint平台的Request组件中,通过DataWeave将输入JSON转换为指定格式的multipart/mixed负载时,输出结果中存在多余的边界标识--XX,需要移除该冗余内容。

输入数据

{"salesOrderNumber": "129467145", "items": [{"salesOrderItemNumber": "20", "firstPlannedShipDate": "2024-05-27T00:00:00.000Z", "firstPlannedDeliveryDate": "2024-06-25T00:00:00.000Z"}, {"salesOrderItemNumber": "40", "firstPlannedShipDate": "2024-05-27T00:00:00.000Z", "firstPlannedDeliveryDate": "2024-06-25T00:00:00.000Z"}]}

原有DataWeave代码

%dw 2.0
import * from dw::util::Coercions
output multipart/mixed boundary="batch"
var innerJsonPart ={"ZZ1_FCDD_SDI": "\/Date(1719273600)\/", "ZZ1_FCSD_SDI": "\/Date(1716768000)\/"}
---
parts:payload.items map(item, index)->(
  {
    headers: {
      "Content-Type": "multipart/mixed; boundary=changeset_mychangeset" ++ (index+1)  ,
    },
      content: {
          parts: {part0:
  {
    headers: {
      "Content-Type": "application/http",
      "Content-Transfer-Encoding": "binary"
    },
    content: write( { parts: [
                    {                           
                        content: "PATCH A_SalesOrderItem(SalesOrder='0" ++ (payload.salesOrderNumber) ++"',SalesOrderItem='" ++ (item.salesOrderItemNumber) ++"') HTTP/1.1"
                    },
                    {                            headers: {
                            "Content-Type": "application/json"
                        },
                        content: innerJsonPart
                    }
    ]    
    }, "multipart/mixed",{boundary:
"XX"}),         
          },   
          }}})

当前问题输出

--batch    
    Content-Type: multipart/mixed; boundary=changeset_mychangeset1
    
    --changeset_mychangeset1
    Content-Type: application/http
    Content-Transfer-Encoding: binary
    
    PATCH A_SalesOrderItem(SalesOrder='0129467145',SalesOrderItem='20') HTTP/1.1
    Content-Type: application/json
    
    {
    "ZZ1_FCDD_SDI" : "\/Date(1719273600)\/",
    "ZZ1_FCSD_SDI" : "\/Date(1716768000)\/"
     }
    --changeset_mychangeset1--
    --batch
    
    Content-Type: multipart/mixed; boundary=changeset_mychangeset2
    
    --changeset_mychangeset2
    Content-Type: application/http
    Content-Transfer-Encoding: binary
    
    PATCH A_SalesOrderItem(SalesOrder='0129467145',SalesOrderItem='40') HTTP/1.1
    Content-Type: application/json
    
    {
    "ZZ1_FCDD_SDI" : "\/Date(1719273600)\/",
    "ZZ1_FCSD_SDI" : "\/Date(1716768000)\/"
     }
    --changeset_mychangeset2--    
    --batch--

问题分析

原有代码中手动调用write(..., "multipart/mixed", {boundary: "XX"})生成内层multipart内容,导致额外插入了XX相关的冗余边界。实际上无需手动处理内层multipart的序列化,直接通过DataWeave的multipart结构定义,平台会自动处理边界生成逻辑。

修正后的DataWeave代码

%dw 2.0
output multipart/mixed boundary="batch"
var innerJsonPart = {"ZZ1_FCDD_SDI": "\/Date(1719273600)\/", "ZZ1_FCSD_SDI": "\/Date(1716768000)\/"}
---
parts: payload.items map(item, index) -> {
    headers: {
        "Content-Type": "multipart/mixed; boundary=changeset_mychangeset" ++ (index+1)
    },
    content: {
        parts: [
            {
                headers: {
                    "Content-Type": "application/http",
                    "Content-Transfer-Encoding": "binary"
                },
                content: "PATCH A_SalesOrderItem(SalesOrder='0" ++ payload.salesOrderNumber ++ "',SalesOrderItem='" ++ item.salesOrderItemNumber ++ "') HTTP/1.1"
            },
            {
                headers: {
                    "Content-Type": "application/json"
                },
                content: innerJsonPart
            }
        ]
    }
}

修正效果

输出不再包含多余的--XX边界,内层multipart会自动使用指定的changeset_mychangesetN边界,结构完全符合业务要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 20:24:56