ABAP接口之Http发送json报文_abap http 转换为json输出-程序员宅基地

技术标签: SAP  

ABAP接口之Http发送json报文

 

abap 调用http 发送 json 测试函数

SE11创建结构:zsmlscpnotice

SE37创建函数:zqb_test_http_fuc1

FUNCTION zqb_test_http_fuc1.
*"----------------------------------------------------------------------
*"*"本地接口:
*"----------------------------------------------------------------------
  DATA: json_ser TYPE REF TO cl_trex_json_serializer,
        json_des TYPE REF TO cl_trex_json_deserializer.

  DATA: lv_url TYPE string."http 服务接口地址
  DATA: lo_http_client  TYPE REF TO if_http_client.

  DATA: lv_len TYPE i."发送报文长度
  DATA: lv_respon TYPE string.
  DATA: lv_subrc TYPE sy-subrc.
  DATA: lv_json_str TYPE string. "发送报文
  DATA: lv_msgty TYPE c,
        lv_msgtx TYPE string.

  DATA: lt_json TYPE STANDARD TABLE OF zsmlscpnotice,
        ls_json TYPE zsmlscpnotice.

* 设置HTTP接口地址
  lv_url = 'http://ip:端口/服务'.

* 设置报文内容(json格式字符串)
  ls_json-functionname = 'XXXXXX'.
  ls_json-bcpcode = '20170214000000'.
  ls_json-status = 'S'.
  ls_json-msg = '请调用接口抓取数据'.
  ls_json-result = ''.
  APPEND ls_json TO lt_json.

* 内表->JSON
  CREATE OBJECT json_ser
    EXPORTING
      data = lt_json[].
  CALL METHOD json_ser->serialize.
  CALL METHOD json_ser->get_data
    RECEIVING
      rval = lv_json_str.

  "创建客户端请求
  CALL METHOD cl_http_client=>create_by_url
    EXPORTING
      url                = lv_url
    IMPORTING
      client             = lo_http_client
    EXCEPTIONS
      argument_not_found = 1
      plugin_not_active  = 2
      internal_error     = 3
      OTHERS             = 4.
  IF sy-subrc <> 0.
    "lv_subrc = sy-subrc.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH
               sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    EXIT.
  ENDIF.

  "设定传输请求内容格式以及编码格式
  lo_http_client->request->set_content_type( content_type = 'application/json; charset=utf-8' ).

  "设定调用服务
  lo_http_client->request->set_method( if_http_request=>co_request_method_post ).

  "设置待传输内容
  lv_len = strlen( lv_json_str ).
  CALL METHOD lo_http_client->request->set_cdata
    EXPORTING
      data   = lv_json_str
      offset = 0
      length = lv_len.

  "发送请求
  lo_http_client->send(  EXCEPTIONS http_communication_failure = 1
                                    http_invalid_state         = 2 ).

  IF sy-subrc <> 0.
    "操作失败,获取失败原因
    "lv_subrc = sy-subrc.
    lo_http_client->get_last_error( IMPORTING message = lv_msgtx ).
    lv_msgty = 'E'.
    EXIT.
  ENDIF.

  "读取远程服务返回的处理过结果。
  lo_http_client->receive( EXCEPTIONS http_communication_failure = 1
                                      http_invalid_state         = 2
                                      http_processing_failed     = 3 ).

  IF sy-subrc <> 0 .
    "lv_subrc = sy-subrc.
    lo_http_client->get_last_error( IMPORTING message = lv_msgtx ).
    lv_msgty = 'E'.
    EXIT.
  ELSE.
    "读取返回返回内容
    CLEAR lv_respon.
    lv_respon = lo_http_client->response->get_cdata( ).
  ENDIF.
ENDFUNCTION.

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hewusheng10/article/details/104462037

智能推荐

Apache和Nginx下php $_SERVER['SERVER_NAME'] 变量的区别_ngnix php $_server['server_name']-程序员宅基地

文章浏览阅读968次。在apache和nginx下分别给虚拟主机www.test.com添加一个别名m.test.com,配置如下_ngnix php $_server['server_name']

【Linux报错】VM虚拟机的CentOS7系统启动时报Generating /run/initramfs/rdsosreport.txt-程序员宅基地

文章浏览阅读8k次,点赞6次,收藏11次。一、场景:因Linux无故关机,重启后报错Generating /run/initramfs/rdsosreport.txt二、解决:解决步骤:查看/dev/mapper下有什么文件、执行xfs_repair、重启。查看/dev/mapper路径下的文件,重点查看root相关的文件,因这里是centos系统,一般会有一个centos-root文件,需要的就是这个文件ls /dev/mapper/执行命令xfs_repair /dev/mapper/centos-root -L_generating /run/initramfs

机器学习---吴恩达---Week5(神经网络训练过程)-程序员宅基地

文章浏览阅读107次。Cost Function and BackPropagation(损失函数与反向传播)Cost Function(损失函数)神经网络模型Cost FunctionBackPropagation Algorithm(反向传播算法)目的:最小化损失函数Forward Propagation(前向传播)Backpropagation(..._吴恩达 机器学习 神经网络 week5

Autocad、中望CAD自动加载程序研究(注册表法、acad.rx、acaddoc.lsp或acad.lsp)_中望cad arx dbx文件-程序员宅基地

文章浏览阅读3.3k次。Autocad、中望CAD自动加载程序研究(注册表法、acad.rx、acaddoc.lsp或acad.lsp)一、使用注册表假设你的arx文件名字是aaa.arx绝对路径是c:\aaa.arx(1)Autocad:拿cad13做例子在注册表路径下HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R19.0\ACAD-B001:804\A..._中望cad arx dbx文件

POJ2485 Highways-程序员宅基地

文章浏览阅读94次。Time Limit:1000MSMemory Limit:65536KB64bit IO Format:%lld & %lluDescriptionThe island nation of Flatopia is perfectly flat. Unfortunately, Flatopia has...

上位机图像处理和嵌入式模块部署(qmacvisual灰度匹配)_嵌入式实现模版匹配-程序员宅基地

文章浏览阅读737次,点赞19次,收藏8次。【声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 模板匹配是图像中经常使用到的功能。我看过很多现场配置部署的同学,虽然他们使用的是类似于vision master、visio pro这样的专业机器视觉软件,但是大家会使用的功能也集中在模板匹配上面。来一个零件,匹配一次。如果零件的数量非常大,就变成了体力活。所以,这从另外一个方面也说明了,模板匹配本身是非常好用,但是也不要滥用。_嵌入式实现模版匹配

随便推点

wps 字体对系统无效_linux版WPS系统缺失字体的解决办法-程序员宅基地

文章浏览阅读1.3k次。每次启动linux版WPS就会弹出“系统缺失字体……”提醒对话框,对于系统缺失字体有以下几种:wingdings、wingdings 2、wingdings 3、Webdings、MT Extra,下面就来讲解如何让系统不缺失这些字体呢?从网上找到wingdings、wingdings 2、wingdings 3、Webdings、MT Extra这些字体进入主文件夹,按Ctrl+h键(显示隐藏文..._wps提示方正黑体_gbk对系统无效

利用MATLAB对图像中物体进行计数_matlab特殊形状计数-程序员宅基地

文章浏览阅读1.6w次,点赞18次,收藏178次。**利用MATLAB对一张图片中相同得物体进行计数。**MATLAB中已有函数可对二值化中的白色区域进行计数。[labeled,numObjects]=bwlabel(‘图像名’,8);运行后numObjects(即物体个数)的值会显示在右侧的工作区中。因此我们需要做的是对图像进行处理,包括二值化,除噪等。若直接将图像转化为二值图像进行计数,则无法得到正确数据。如clc;clo..._matlab特殊形状计数

主从热备+负载均衡(LVS + keepalived)_网络做完热备还能做负载均衡吗-程序员宅基地

文章浏览阅读1.9k次。前言  淘宝架构师李智慧大牛的书籍《大型网站技术架构》以及旭龙兄的博客 ---》【大型网站技术实践】初级篇:借助LVS+Keepalived实现负载均衡。  从上参考而得来本文,本文旨在记录自己的学习过程,同时给大家参考,不对的地方欢迎大家拍砖,拍砖的同时也希望甚至恳请大家能写出原因,让大家都有所明白和收获!  相关的概念我这里就不多讲了,可以从如上的书籍和旭龙兄的博客中去了解,那么下..._网络做完热备还能做负载均衡吗

SpringMVC(全)-程序员宅基地

文章浏览阅读8.9k次,点赞7次,收藏80次。全网最全总结,有不足之处欢迎补充[email protected]可以通过图片连接自行查看结果截图_springmvc

substring()&&charAt()_substring() charat()-程序员宅基地

文章浏览阅读208次。substring()str=str.substring(intbeginIndex);截取掉str从首字母起长度为beginIndex的字符串,将剩余字符串赋值给strstr=str.substring(int beginIndex,int endIndex);截取str中从beginIndex开始至endIndex结束时的字符串,并赋值给str;charAt()char result=s.charAt(6);方法用于返回指定索引处的字符(索引范围为从 0 到 length() - 1_substring() charat()

把System.out.print的输出加到logback的日志文件中_logback system.out输出到文件-程序员宅基地

文章浏览阅读1.9k次。经常会碰到一些旧系统,使用System.out直接在控制台输出日志,然后再用命令行重定向的方法把日志写到文件中,这个方法主要问题是日志会越来越大,要经常手动删除。今天我们就把System.out的输出加到logback的日志文件中,由logback来管理这些日志。直接上代码,一都在代码和注释中了。和控制台输出的一模一样。_logback system.out输出到文件