SAP 发布JSON接口

本文档详细介绍了如何在SAP中创建REST接口并指定返回格式为JSON。通过事务代码SE24创建处理类,实现IF_HTTP_EXTENSION~HANDLE_REQUEST方法来编写接口逻辑。在方法中,接收并解析JSON数据,查询SAP系统信息,然后将结果转换回JSON格式并返回。最后,通过SICF服务发布并激活服务,可以使用Postman或浏览器进行测试。

SAP发布REST的JSON格式接口:
主要简单介绍一下SAP如何发布REST接口,并指定格式是JSON的。

  1. 创建服务处理类
    服务处理类用于外部系统调用SAP服务(即sap接口)的时候,作为服务的处理类,即SAP接口的响应代码,本文档是获取信息以JSON形式返回给外部系统
    1.1 创建处理类的具体步骤:
    (1) 输入事物代码:se24,输入要创建的类名,点击创建
    在这里插入图片描述
    (2) 选择处理类的类型
    在这里插入图片描述
    (3) 输入SAP标准接口:IF_HTTP_EXTENSION
    回车后到方法页签中实现:IF_HTTP_EXTENSION~HANDLE_REQUEST
    在这里插入图片描述
    在这里插入图片描述
    (4) 实现接口处理代码
    主要在方法IF_HTTP_EXTENSION~HANDLE_REQUEST中进行代码处理,实现
    接口的逻辑
  METHOD if_http_extension~handle_request.

    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:lv_res TYPE string.
    DATA:BEGIN OF lw_request,
           matnr TYPE matnr,
           spras TYPE spras,
         END OF lw_request.

    DATA:BEGIN OF msg,
           msgtyp TYPE bapi_mtype,
           msgtxt TYPE bapi_msg,
         END OF msg.
    DATA:BEGIN OF lw_response,
           matnr TYPE matnr,
           ernam TYPE ernam,
           ersda TYPE ersda,
           maktx TYPE maktx,
           msg   LIKE msg,
         END OF lw_response.
    DATA lt_request  LIKE STANDARD TABLE OF lw_request."该内表要和接收的数据结构一致
    DATA lt_response LIKE STANDARD TABLE OF lw_response.

    CLEAR:lt_request.

*------接收并解析传递的JSON数据为内表(如果前端传递的是对象,则需要用结构接收;如果传递的数组,则使用内表)
    lv_json_string = server->request->get_cdata( ).
    /ui2/cl_json=>deserialize(
      EXPORTING
        json = lv_json_string
        CHANGING data = lw_request ).
*------设置返回数据格式
    CALL METHOD server->response->if_http_entity~set_content_type
      EXPORTING
        content_type = 'application/json'.



*------获取要返回的数据
    IF lw_request IS NOT INITIAL.

      SELECT
        mara~matnr,
        mara~ernam,
        mara~ersda,
        makt~maktx
      FROM mara
      LEFT JOIN makt
        ON mara~matnr = makt~matnr
      FOR ALL ENTRIES IN @lt_request
      WHERE
        mara~matnr = @lt_request-matnr AND
        makt~spras = @lt_request-spras
      INTO CORRESPONDING FIELDS OF TABLE @lt_response.

      IF lt_response IS INITIAL.
        lw_response-msg-msgtxt = '查询失败'.
        lw_response-msg-msgtyp = 'E'.
      ELSE.
        lw_response-msg-msgtxt = '查询成功'.
        lw_response-msg-msgtyp = 'S'.
      ENDIF.
    ELSE.
      lw_response-msg-msgtxt = '发送数据为空'.
      lw_response-msg-msgtyp = 'E'.
    ENDIF.



*------要返回的数据转换成JSON格式
    CLEAR:lv_json_string.
    lv_json_string = /ui2/cl_json=>serialize(
      data = lw_response
      compress = abap_true
      pretty_name = /ui2/cl_json=>pretty_mode-camel_case ).

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

  ENDMETHOD.
  1. SICF服务发布:
    2.1 输入服务管理事务代码:SICF,点击执行,进入服务管理页面
    在这里插入图片描述

2.2 创建自定义服务:ZCL_JSON_TEST
在这里插入图片描述
2.3 输入账号密码和client
在这里插入图片描述
2.4 输入服务处理类
在这里插入图片描述
2.5 保存并右键激活服务
在这里插入图片描述
2.5 右键测试服务(右键同上)
获取URL后使用postman或者浏览器测试结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值