一、创建全局类
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测试
