matinal:SAP ABAP 发布HTTP RestFul服务全过程解析(三)

2023-11-12 08:30:44 浏览数 (3)

一、SE24创建类:Z_HCX_HTTP

1、创建类:

2、切换到接口(interface)页签,输入IF_HTTP_EXTENSION ,回车。切换到方法(method)页签,双击IF_HTTP_EXTENSION~HANDLE_REQUEST进入代码编辑界面。

IF_HTTP_EXTENSION~HANDLE_REQUEST方法编写代码:

代码语言:javascript复制
   METHOD if_http_extension~handle_request.
     DATA: BEGIN OF ls_data,
             matnr TYPE matnr,
             maktx TYPE maktx,
           END OF ls_data.
     DATA: lt_data LIKE TABLE OF ls_data.

     DATA: lt_fields TYPE tihttpnvp.
     FIELD-SYMBOLS: <fs_field> LIKE LINE OF lt_fields.

     DATA: lv_method TYPE string. "获取GET/POST方式
     DATA: lv_json  TYPE string,  "返回参数
           lv_json1 TYPE string,  "获取传回值数据
           lv_json2 TYPE string.  "获取传回值数据


*    获取JSON抬头数据
     server->request->get_header_fields(
         CHANGING
           fields = lt_fields
       ).
     lv_method = server->request->get_header_field( name = '~request_method' )."获取GET/POST方式
     CALL METHOD server->response->if_http_entity~set_content_type
       EXPORTING
         content_type = 'application/json'.

     CASE lv_method.
       WHEN 'GET'.
*        获取数据
         SELECT matnr maktx INTO CORRESPONDING FIELDS OF TABLE lt_data
           FROM makt
           UP TO 20 ROWS.

*        内表转换JSON
         CALL METHOD /ui2/cl_json=>serialize
           EXPORTING
             data   = lt_data
           RECEIVING
             r_json = lv_json.

*        将行数据JSON返回给调用端
         server->response->set_cdata(
           EXPORTING
             data   = lv_json
         ).

         server->response->set_status( code = 200 reason = 'OK' ).
       WHEN 'POST'.
*        获取JSON行数据
         lv_json1 = server->request->if_http_entity~get_cdata( ).
*        解析json至内表方法1
         /ui2/cl_json=>deserialize( EXPORTING json = lv_json1
                                     CHANGING data = ls_data ).
         IF NOT lv_json1 IS INITIAL.
*          获取数据
           SELECT matnr maktx INTO CORRESPONDING FIELDS OF TABLE lt_data
             FROM makt
             UP TO 20 ROWS
             where matnr = ls_data-matnr.
*         内表转换json
           CALL METHOD /ui2/cl_json=>serialize
             EXPORTING
               data   = lt_data
             RECEIVING
               r_json = lv_json.
*        将行数据JSON返回给调用端
           server->response->set_cdata(
             EXPORTING
               data   = lv_json
           ).
         ENDIF.

         LOOP AT lt_fields INTO DATA(ls_fields).
           CASE ls_fields-name.
             WHEN 'lt_data'.
               lv_json2 = ls_fields-value.
           ENDCASE.
         ENDLOOP.
*        解析json至内表方法1
         /ui2/cl_json=>deserialize( EXPORTING json = lv_json2
                                     CHANGING data = lt_data ).

         IF NOT lv_json2 IS INITIAL.
*        将行数据JSON返回给调用端
           server->response->set_cdata(
             EXPORTING
               data   = 'SoapUi传参已收到'
           ).
         ENDIF.
         server->response->set_status( code = 200 reason = 'OK' ).

     ENDCASE.
   ENDMETHOD.

二、使用事务码 SICF default_host/sap 节点下面创建子节点,用 Z_HCX_HTTP 类并激活方法:

1、创建子元素:

之后点击保存。

2、在default_host/sap中找到刚刚创建的子元素:Z_HCX_HTTP激活服务:

3、获取URL调用地址:

直接打开默认是GET请求:

在Postman 中测试post请求:

在SoapUI 中测试post请求:

0 人点赞