在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}
- 如果用模板1,要传包裹字符串的JSON:
- 认证方式:可以在请求头加
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
相关产品推荐
相关产品推荐

