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测试

相关推荐
爱喝水的鱼丶5 天前
SAP-ABAP:ALV上线前测试 Checklist——保障报表生产环境稳定运行
性能优化·sap·abap·开发交流·交流学习
爱喝水的鱼丶6 天前
SAP-ABAP:一次关于“交货日期”的增强需求:从复杂增强到标准功能的回归之旅
运维·开发语言·性能优化·sap·abap·经验交流
爱喝水的鱼丶6 天前
SAP-ABAP:ALV通用封装实践——搭建可复用的ALV开发工具类,减少80%重复代码
开发语言·性能优化·sap·abap·erp·alv
爱喝水的鱼丶6 天前
SAP-ABAP:ALV跨版本兼容指南——适配ECC与S4 HANA系统的ALV开发注意事项
开发语言·性能优化·sap·abap·经验交流
爱喝水的鱼丶11 天前
SAP-ABAP:ALV数据导出增强——实现Excel/PDF/CSV多格式自定义导出
开发语言·性能优化·sap·abap·erp
海阔天空09212 天前
ABAP 网页端 通用配置表维护程序
abap
xlxxy_13 天前
sap获取批次特性报表
java·linux·开发语言·前端·数据库·abap·mm
爱喝水的鱼丶13 天前
SAP-ABAP:ALV字段布局定制全攻略——快速适配业务端个性化展示需求
运维·性能优化·sap·abap·经验交流·alv报表
爱喝水的鱼丶22 天前
SAP-ABAP:接口 vs 抽象类:ABAP OOP两类扩展方式的差异与选型原则
运维·性能优化·sap·abap·erp·经验交流
修电脑的猫1 个月前
LSMW target field DATAM mapped as CHAR1, length 1 in table /SAPDMC/LSGBDC
sap·abap