首页 > 解决方案 > Oracle Rest Data 服务 - 自定义响应状态码

问题描述

默认情况下,ORDS 上的所有成功请求都以状态码 200 Ok 响应。很好。但有时我需要响应可自定义的错误代码,即。201、202 等

是否有任何模式可以在 PUT 请求时响应 ORDS 上的可自定义错误代码?

问候佩德罗

标签: oracle-apexoracle-ords

解决方案


是的,一点没错。

只需添加一个名为 X-ORDS-STATUS-CODE 的参数,并将其分配给一个 :bind,您可以将其作为 OUT RESPONSE HEADER,类型为 INTEGER。

然后在您的 POST 或 PUT 处理程序代码中,分配您想要的状态代码。

:status := 201;

所以...

在此处输入图像描述

这是完整的模块导出 -

-- Generated by Oracle SQL Developer REST Data Services 20.2.0.147.0319
-- Exported REST Definitions from ORDS Schema Version 20.2.0.r1611903
-- Schema: HR   Date: Mon Jun 22 16:41:15 EDT 2020
--
BEGIN
  ORDS.DEFINE_MODULE(
      p_module_name    => 'status',
      p_base_path      => '/status/',
      p_items_per_page =>  25,
      p_status         => 'PUBLISHED',
      p_comments       => NULL);      
  ORDS.DEFINE_TEMPLATE(
      p_module_name    => 'status',
      p_pattern        => '201',
      p_priority       => 0,
      p_etag_type      => 'HASH',
      p_etag_query     => NULL,
      p_comments       => NULL);
  ORDS.DEFINE_HANDLER(
      p_module_name    => 'status',
      p_pattern        => '201',
      p_method         => 'POST',
      p_source_type    => 'plsql/block',
      p_items_per_page =>  0,
      p_mimes_allowed  => '',
      p_comments       => NULL,
      p_source         => 
'declare
 new_record integer;
begin
 insert into demo201 (column2) values (:words) returning column1 into new_record;
 commit;
 :status := 201;
end;'
      );
  ORDS.DEFINE_PARAMETER(
      p_module_name        => 'status',
      p_pattern            => '201',
      p_method             => 'POST',
      p_name               => 'X-ORDS-STATUS-CODE',
      p_bind_variable_name => 'status',
      p_source_type        => 'HEADER',
      p_param_type         => 'INT',
      p_access_method      => 'OUT',
      p_comments           => NULL);      


  COMMIT; 
END;

这是一个更好的示例,我捕获了异常并将 HTTP 响应状态代码设置为“400”


推荐阅读