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

Salesforce集成MuleSoft:创建Account时调用POST API技术咨询

Salesforce与MuleSoft集成:Apex实现JSON序列化及POST请求发送

一、JSON序列化实现

根据你的指定JSON结构,推荐两种序列化方式,按需选择:

1. 自定义类映射(类型安全,推荐固定结构场景)

先定义与目标JSON结构匹配的内部类,确保字段一一对应:

private class AccountPayload {
    public String Name;
    public String BillingStreet;
    public String Industry;
    public String ExternalId__c;
    // 按需求添加其他需要传输的字段
}

在触发逻辑中实例化并赋值,再完成序列化:

// 假设已获取新建的Account记录acc
AccountPayload payload = new AccountPayload();
payload.Name = acc.Name;
payload.BillingStreet = acc.BillingStreet;
payload.Industry = acc.Industry;
payload.ExternalId__c = acc.ExternalId__c;

// 序列化为标准JSON字符串
String jsonBody = JSON.serialize(payload);

2. 动态Map构造(适合结构不固定的场景)

如果字段需动态调整,直接用Map<String, Object>构建数据:

Map<String, Object> payloadMap = new Map<String, Object>{
    'Name' => acc.Name,
    'BillingStreet' => acc.BillingStreet,
    'Industry' => acc.Industry,
    'ExternalId__c' => acc.ExternalId__c
};

String jsonBody = JSON.serialize(payloadMap);

二、发送POST请求到MuleSoft

使用Apex的Http和HttpRequest类实现请求发送,务必先在Salesforce远程站点设置中添加MuleSoft服务的域名,否则会触发调用异常。

完整请求代码示例

public class AccountTriggerHandler {
    public static void handleAfterInsert(List<Account> newAccounts) {
        for(Account acc : newAccounts) {
            // 1. 构造JSON payload(以自定义类方式为例)
            AccountPayload payload = new AccountPayload();
            payload.Name = acc.Name;
            payload.BillingStreet = acc.BillingStreet;
            payload.Industry = acc.Industry;
            payload.ExternalId__c = acc.ExternalId__c;
            String jsonBody = JSON.serialize(payload);

            // 2. 构建HTTP请求
            Http http = new Http();
            HttpRequest request = new HttpRequest();
            // 替换为MuleSoft的完整端点URL,例如https://your-mulesoft-domain.com/Account/CreateAccount/
            request.setEndpoint('https://your-mulesoft-domain.com/Account/CreateAccount/');
            request.setMethod('POST');
            request.setHeader('Content-Type', 'application/json');
            // 若MuleSoft需要认证,添加对应请求头,比如Bearer Token
            // request.setHeader('Authorization', 'Bearer ' + yourAuthToken);
            request.setBody(jsonBody);

            // 3. 发送请求并处理响应
            try {
                HttpResponse response = http.send(request);
                if(response.getStatusCode() >= 200 && response.getStatusCode() < 300) {
                    System.debug('MuleSoft请求成功,响应内容: ' + response.getBody());
                } else {
                    System.debug('MuleSoft请求失败,状态码: ' + response.getStatusCode() + ', 响应内容: ' + response.getBody());
                    // 生产环境建议将错误记录到自定义对象或Platform Events,便于排查
                }
            } catch(Exception e) {
                System.debug('请求发送异常: ' + e.getMessage());
            }
        }
    }

    // 内部Payload类
    private class AccountPayload {
        public String Name;
        public String BillingStreet;
        public String Industry;
        public String ExternalId__c;
    }
}

三、关键注意事项

  • 远程站点配置:在Salesforce Setup中搜索「远程站点设置」,添加MuleSoft服务的完整域名,否则会触发System.CalloutException。
  • 异步处理:同步触发器的执行时间有限,建议将请求逻辑放到@future(callout=true)方法或Queueable类中异步执行,避免超时:
@future(callout=true)
public static void sendAccountToMuleSoft(Account acc) {
    // 此处放入JSON构造和请求发送代码
}
  • 认证处理:根据MuleSoft的认证要求添加对应请求头(如API Key、OAuth2 Token),确保请求能通过服务验证。
  • 错误日志:生产环境不要仅依赖调试日志,建议将错误信息持久化到自定义对象,方便后续问题排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 16:05:05