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

在Oracle APEX中处理POST请求(JSON)的配置问题求助

解决Apex REST接收POST JSON并存储到数据库的问题

先帮你梳理下关键步骤,我之前也碰到过类似的配置坑,一步步来应该能搞定:

1. 确保REST类的注解与结构正确

首先你的Apex REST类得用对注解,还要适配JSON的解析逻辑,给你两个常用的示例模板:

模板1:直接接收JSON字符串并解析

适合不确定JSON结构的场景,用JSON.deserializeUntyped动态解析:

@RestResource(urlMapping='/SaveJsonData/*')
global class JsonDataReceiver {
    @HttpPost
    global static String receiveAndStore(String jsonBody) {
        // 把JSON字符串转成Map方便提取字段
        Map<String, Object> jsonMap = (Map<String, Object>)JSON.deserializeUntyped(jsonBody);
        
        // 假设你有个自定义对象DataLog__c用来存数据
        DataLog__c newRecord = new DataLog__c();
        newRecord.RawJson__c = jsonBody; // 先存完整JSON
        // 提取JSON里的具体字段(示例:提取name字段)
        if(jsonMap.containsKey('name')) {
            newRecord.Name = String.valueOf(jsonMap.get('name'));
        }
        insert newRecord;
        
        return 'Success: 已存储记录ID ' + newRecord.Id;
    }
}

模板2:用内部类匹配JSON结构(自动序列化)

适合JSON结构固定的场景,让Apex自动帮你解析JSON:

@RestResource(urlMapping='/SaveJsonData/*')
global class JsonDataReceiver {
    // 定义和你的JSON结构完全匹配的内部类
    global class RequestPayload {
        public String name;
        public Integer orderNumber;
        public Boolean isActive;
        // 其他字段按需添加
    }

    @HttpPost
    global static String receiveAndStore(RequestPayload payload) {
        DataLog__c newRecord = new DataLog__c(
            Name = payload.name,
            Order_Number__c = payload.orderNumber,
            Is_Active__c = payload.isActive,
            RawJson__c = JSON.serialize(payload)
        );
        insert newRecord;
        
        return 'Success: 已存储记录ID ' + newRecord.Id;
    }
}

2. 检查权限与API访问配置

这是很多人容易忽略的点:

  • 把这个Apex类添加到你的调用用户Profile的Apex Class Access列表中
  • 确保调用用户拥有API Enabled权限,以及目标数据库对象的创建权限

3. 测试POST请求的正确姿势

测试时要注意几个细节:

  • 请求URL格式:https://你的Salesforce实例域名/services/apexrest/SaveJsonData(替换成自己的实例域名和代码里的urlMapping路径)
  • 请求头必须设置:Content-Type: application/json
  • 请求体格式:
    • 如果用模板1,要传包裹字符串的JSON:{"jsonBody": "{\"name\":\"测试订单\",\"orderNumber\":123}"}
    • 如果用模板2,直接传匹配结构的JSON:{"name":"测试订单","orderNumber":123,"isActive":true}
  • 认证方式:可以在请求头加Authorization: Bearer 你的SessionId,或者用OAuth2令牌

4. 排查常见问题

  • 遇到权限错误:去Setup的Debug Logs里生成该类的日志,查看具体的权限报错信息,对应调整Profile权限
  • JSON解析失败:先在Postman里校验JSON格式是否合法,或者在类里加System.debug(jsonBody)打印请求体,排查格式问题
  • 端点访问404:检查urlMapping的拼写,比如有没有多余斜杠,Salesforce的REST端点大小写不敏感,但尽量和代码保持一致

额外参考方向

可以去Salesforce官方文档查看Apex REST的官方指南,里面有更详细的注解说明、序列化技巧,以及常见错误排查方案,比第三方博客更权威。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:28:27