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
相关产品推荐
相关产品推荐

