ABAP:对外发布Restful

一、创建全局类

SE24创建全局类

实现IF_HTTP_EXTENSION接口

创建GET和POST方法

两个方法都添加参数

修改IF_HTTP_EXTENSION~HANDLE_REQUEST方法的代码

复制代码
METHOD if_http_extension~handle_request.
  DATA(lv_method) = server->request->get_method( )."查看调用方法GET OR POST
  CASE lv_method.
    WHEN 'GET'.
      me->get( server ).
    WHEN 'POST'.
      me->post( server ).
    WHEN OTHERS.
      "Sets current HTTP status code
      server->response->set_status( code = 405 reason = '请求方法不支持,请联系管理员!' ).
  ENDCASE.

ENDMETHOD.

修改POST方法的代码:

复制代码
  METHOD post.

    DATA: lr_json_ser TYPE REF TO cl_trex_json_serializer,
          lr_json_des TYPE REF TO cl_trex_json_deserializer.
    DATA: lv_json_string TYPE string.

    DATA: gt_t005u TYPE TABLE OF t005u.
    DATA: lv_request TYPE string.
    DATA: BEGIN OF ls_request,
            spras TYPE spras,
            land1 TYPE land1,
          END OF ls_request.

    DATA lt_request LIKE STANDARD TABLE OF ls_request. " 该内表格式要和外部传入参数格式一致

*&--- 获取调用时候传入的参数
    CLEAR: lt_request.

    lv_json_string = server->request->get_cdata( ). " 获取传入的 JSON 格式数据
    /ui2/cl_json=>deserialize(    " 把 JSON 格式的转化为 ABAP 内表, 把 LV_JSON_STRING 放入 LT_REQUEST 里面
                      EXPORTING
                        json = lv_json_string
                        pretty_name = /ui2/cl_json=>pretty_mode-camel_case
                      CHANGING
                        data = ls_request ).

    APPEND ls_request TO lt_request.

*&--- 设置返回数据格式
    CALL METHOD server->response->if_http_entity~set_content_type
      EXPORTING
        content_type = 'application/json'.

*&--- 获取要返回的数据
    IF lt_request[] IS NOT INITIAL.
      CLEAR: gt_t005u.

      SELECT *
        INTO TABLE gt_t005u
        FROM t005u
        UP TO 5 ROWS
        FOR ALL ENTRIES IN lt_request
        WHERE spras = lt_request-spras
          AND land1 = lt_request-land1.
    ENDIF.
      SELECT *
        INTO TABLE gt_t005u
        FROM t005u
        UP TO 5 ROWS.

*&--- 要返回的数据转换成 JSON 格式
    CLEAR: lv_json_string.

    CREATE OBJECT lr_json_ser
      EXPORTING
        data = gt_t005u[].
    CALL METHOD lr_json_ser->serialize.
    CALL METHOD lr_json_ser->get_data
      RECEIVING
        rval = lv_json_string.

*&--- 设置返回数据
    server->response->set_cdata(
            EXPORTING
              data   = lv_json_string    " Character data
          ).


  ENDMETHOD.

二、发布服务

输入事务码:SICF

创建服务

输入服务名

输入之前创建的全局类

存储成功后激活服务

三、测试服务

测试服务

拿到URL后在POSTMAN测试

相关推荐
修电脑的猫14 小时前
LSMW target field DATAM mapped as CHAR1, length 1 in table /SAPDMC/LSGBDC
sap·abap
duangww18 小时前
ALV通过GOS服务实现上传PDF附件
abap·附件
爱喝水的鱼丶20 小时前
SAP-ABAP:SAP表与视图权限管控方案:表维护权限、视图访问权限配置实操
运维·数据库·性能优化·sap·abap·权限·表和视图
爱喝水的鱼丶4 天前
SAP-ABAP:SAP视图开发入门:四类标准视图的适用场景与创建步骤详解
服务器·数据库·性能优化·sap·abap
爱喝水的鱼丶5 天前
SAP-ABAP:SAP多表连接视图实战:内连接/外连接配置逻辑与性能优化技巧
运维·开发语言·学习·性能优化·sap·abap
爱喝水的鱼丶11 天前
SAP-ABAP:SAP基础数据校验工具开发系列博客(共5篇)第五篇:性能优化与上线运维:保障高并发场景下的工具稳定运行
运维·学习·性能优化·sap·abap·erp·经验交流
爱喝水的鱼丶11 天前
SAP-ABAP:SAP 内存管理详解:从架构到优化
开发语言·学习·架构·sap·abap·内存管理
爱喝水的鱼丶13 天前
SAP-ABAP:SAP基础数据校验工具开发系列博客(共5篇)第三篇:SAP接口对接开发:实现数据的实时/批量校验交互
运维·数据库·学习·性能优化·sap·abap·经验交流
duangww13 天前
IDCNACCTBLN 增强实现负号提前
abap
爱喝水的鱼丶13 天前
SAP-ABAP:SAP 简单报表输出开发系列(共6篇) 第四篇:SAP 报表异常处理机制:数据校验与消息提示规范落地
开发语言·数据库·学习·算法·sap·abap