class ZCL_RESTFUL_COMMON definition
public
final
create public .
public section.
interfaces IF_HTTP_EXTENSION .
protected section.
private section.
ENDCLASS.
CLASS ZCL_RESTFUL_COMMON IMPLEMENTATION.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_RESTFUL_COMMON->IF_HTTP_EXTENSION~HANDLE_REQUEST
* +-------------------------------------------------------------------------------------------------+
* | [--->] SERVER TYPE REF TO IF_HTTP_SERVER
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD if_http_extension~handle_request.
DATA: req_input_json TYPE string.
DATA: response_json TYPE string.
DATA: lv_method TYPE string.
DATA: lo_server_request TYPE REF TO if_http_request,
lo_server_response TYPE REF TO if_http_response.
DATA: lt_header_fields TYPE tihttpnvp,
ls_header_fields TYPE ihttpnvp.
DATA: ls_syncfg TYPE ztif_syncfg.
DATA: lv_if_id TYPE ze_if_id.
DATA: BEGIN OF ls_error_return,
ev_type TYPE char1,
ev_message TYPE char220,
END OF ls_error_return.
lo_server_request = server->request. "获取请求(自)
lo_server_response = server->response. "获取响应(自)
lv_method = lo_server_request->get_method( ). "获取请求方式
IF lv_method EQ 'POST'.
"获取Header部分
CALL METHOD lo_server_request->get_header_fields
CHANGING
fields = lt_header_fields.
IF lt_header_fields[] IS NOT INITIAL .
READ TABLE lt_header_fields WITH KEY name = 'if_id' INTO ls_header_fields .
ENDIF.
"获取body部分
req_input_json = lo_server_request->get_cdata( ).
lv_if_id = ls_header_fields-value.
SELECT SINGLE * INTO ls_syncfg
FROM ztif_syncfg
WHERE if_id = lv_if_id
AND active = 'X'.
IF sy-subrc EQ 0 AND ls_syncfg-funcname IS NOT INITIAL.
CALL FUNCTION ls_syncfg-funcname
EXPORTING
iv_json = req_input_json
IMPORTING
ev_json = response_json.
ELSE.
CLEAR: ls_error_return.
ls_error_return-ev_type = 'E'.
ls_error_return-ev_message = |SAP接口映射未配置|.
"序列化JSON解析
/ui2/cl_json=>serialize( EXPORTING data = ls_error_return
RECEIVING r_json = response_json ).
ENDIF.
lo_server_response->set_status( code = 200 reason = 'OK' ). "设置响应
lo_server_response->set_content_type( 'application/json;charset=utf-8' )."响应类型
lo_server_response->set_cdata( data = response_json )."响应报文
ENDIF.
ENDMETHOD.
ENDCLASS.
![]()