在Oracle APEX RESTful Services中的PUT资源处理程序中输入参数

时间:2014-12-08 10:10:31

标签: oracle-apex

我正在使用Oracle REST Data Services构建REST API(在APEX UI中称为RESTful Services)。

我只需使用application/x-www-form-urlencoded就可以在PL / SQL处理程序中的POST请求中读取:paramter_name个参数。但是,它们似乎不适用于PUT请求。 The documentation表示它应该与POST,PUT和DELETE操作一起使用。但我只能让它与POST一起工作。

对于非POST请求是否根本不支持(并且文档有误导性),或者我做错了什么?

处理程序详细信息

  • RESTful服务模块:hr/
  • URI模板:test
  • 方法:PUT
  • 来源类型:PL/SQL
  • 允许的MIME类型:(空)
  • 需要安全访问权限:Yes

来源:

begin
 :output := :input;
end;

参数:

Name    | Bind Variable Name    | Access Method | Source Type   | Parameter Type
--------|-----------------------|---------------|---------------|---------------
output  | output                | OUT           | Response Body | String

示例请求

我尝试的请求是:

curl -X PUT -H "Content-Type: application/x-www-form-urlencoded" -d 'input=test' https://apex.oracle.com/pls/apex/redacted/hr/test

我只是得到一个空洞的回应。

但是,如果我将处理程序更改为Method:POST,请尝试以下请求:

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d 'input=test' https://apex.oracle.com/pls/apex/redacted/hr/test

我得到了正确的回答:

{"output":"test"}

1 个答案:

答案 0 :(得分:0)

目前ORDS仅支持json PUT参数。您可以直接参考第一级。如果你需要嵌套的json,那么你需要解析:body(转换为clob)并使用APEX_JSON(Apex 5.0)

示例:

curl -H "Content-Type: application/json" -X PUT -d '{"test1":"xyz","test2":"123", "test3":"asd"}' https://test.example.com/ords/slrv/oliTest/data

{"test1":"xyz", "test2":"123", "test3":"asd","test4":""}

后端代码(类型为plsql)

begin
   owa_util.status_line (200, '', false);
   owa_util.mime_header ('application/json', true);
   htp.prn ('
{"test1":"' || :test1 || '", "test2":"' || :test2 || '", "test3":"' || :test3 || '","test4":"' || :test4 || '"}
');
end;