远程接口调用

1.传输格式.

传输格式均为JSON字符串,使用spring mvc返回对象,并自动通过fastjson,jackson工具类(JsonMapper.java)进行对象到JSON转换。

输出格式符合JSON标准,UTF-8编码

2.在服务器端.

  1. 通过@RequestMapping注解定义一个函数,定义要拦截的url
  2. 一般接口返回不是页面,而是Object,List的值对象,
  3. 要在函数上面加上@ResponseBody,要把值对象转换成JSon对象
1
2
3
4
5
6
7
8
@RequestMapping (value = "getCountByStuCode/{stuCode}" )
@ResponseBody
public List getCountByStuCode( @PathVariable String stuCode) {
     EtDiscipline entity = new EtDiscipline();
     entity.setStuCode(stuCode);
     List<DicMessage> list = etDisciplineService.count(entity);
     return list ;
}

3.在客户端

  1. 首先要准备JDK自带的HttpUrlConnection或者Apacle的HttpClient来实现JAVA的Http协议的访问,下面例子是通过HttpUrlConnection封装了一个提交数据的工具类.这个类基本的看懂就可以,不必要细究,原理是通过http协议模拟浏览器向远程发送数据

    package com.thinkgem.jeesite.common.utils;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.HttpURLConnection;
    import java.net.URL;
    /**
      * HTTP工具类
      *
      */
    public class PostServer {
         
         /**
          * @param param
          * @param url
          * @return
          */
         public static String SendPost(String param, String url) {
             OutputStreamWriter out = null ;
             BufferedReader in = null ;
             String result = "" ;
             try {
                 URL realUrl = new URL(url);
                 HttpURLConnection conn = (HttpURLConnection) realUrl
                         .openConnection();
                 conn.setDoOutput( true );
                 conn.setDoInput( true );
                 conn.setUseCaches( false );
                 conn.setRequestMethod( "POST" );
                 conn.setConnectTimeout( 50000 );
                 conn.setReadTimeout( 50000 );
                 conn.setRequestProperty( "Content-Type" , "application/json" );
                 conn.setRequestProperty( "Accept" , "application/json" );
                 conn.setRequestProperty( "tag" , "htc_new" );
                 conn.connect();
                 out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8" );
                 out.write(param);
                 out.flush();
                 out.close();
                 //
                 in = new BufferedReader( new InputStreamReader(
                         conn.getInputStream(), "UTF-8" ));
                 String line = "" ;
                 while ((line = in.readLine()) != null ) {
                     result += line;
                 }
             } catch (Exception e) {
                 e.printStackTrace();
             } finally {
                 try {
                     if (out != null ) {
                         out.close();
                     }
                     if (in != null ) {
                         in.close();
                     }
                 } catch (IOException ex) {
                     ex.printStackTrace();
                 }
             }
             return result;
         }
    }
  2. 通过上述类先对系统进行模拟登录,提交账号和密码,得到登录后的sessionId

    private static String getLoginSessionId(String userName, String password) {
         // 封装请求参数
         JSONObject json = new JSONObject();
         json.put( "isValidateCodeLogin" , "false" );
         String result = PostServer.SendPost(json.toString(), "<a href="http://127.0.0.1:8888/jeesite/a/login?__ajax=true&mobileLogin=true&isValidateCodeLogin=false&username=" "="" style="color: rgb(59, 115, 175); text-decoration: none; border-radius: 0px !important; background: none !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 20px !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-size: 14px !important; min-height: auto !important;">http://127.0.0.1:8888/jeesite/a/login?__ajax=true&mobileLogin=true&isValidateCodeLogin=false&username=" + userName + "&password=admin" );
         json = JSON.parseObject(result);
         result = json.get( "sessionid" ).toString();
         return result;
    }
  3. 得到sessionId后,然后在每次请求里面都加上session的后缀,这样就类似于当前用户登录去访问这个请求了,具体格式如下

    在请求路径后包含会话ID(JSESSIONID一定要大写)即可,格式如下:

    URL  = “请求URL” + “;JSESSIONID=”+ “会话ID”

    http://127.0.0.1:8080/app/a/test/test/listData;JSESSIONID=b6b486a8919e4fc196358e10b6a82a2b?__ajax=true

    通过一个工具类调用远程API的代码

    public String getScopeBySystem(String stuNumber) {
         JSONObject json = new JSONObject();
         String result = PostServer.SendPost(json.toString(),
                 "<a href="http://127.0.0.1:8888/jeesite/a/getCountByStuCode/" "="" style="color: rgb(59, 115, 175); text-decoration: none; border-radius: 0px !important; background: none !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 20px !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-size: 14px !important; min-height: auto !important;">http://127.0.0.1:8888/jeesite/a/getCountByStuCode/" + stuNumber + ";JSESSIONID="
                         + sessionId + "" );
         return result;
    }
版本: 5.0.0.0 (build 2014.07.07) 1. 概述 RCK(remote call kernel 缩写)为远程调用内核, 其通讯协议为自定义数据流协议。 RCK 负责远程调用过程中的数据组织, 并不关心实际物理通讯协议, 实则属于逻辑层通讯 协议。 RCK 通讯槽接口(RCKSlot)负责数据接收和发送, 属于通讯的适配层, 由第三方来实现 实际的数据传输接口。 RCK 包含 Application, Function, Connection, Command, Response 和 Fields 六 大类, 其主要功能如下: a. Application 类主要负责 Function 的组织和 Response 的分发执行; b. Function 类主要负责 Function 的定义及按各模式调用; c. Connection 类主要负责登录对端应用, Command 请求执行, Response 应答管理, 以及发送和接收数据等等; d. Command 类主要负责函数参数传入, 以及返回值和返回字段值读取; e. Response 类主要负责对端指定 Function 请求的执行处理, 如参数读取、返回 值编辑及提交; f. Fields 类主要负责数据库字段值及定义集的组包和拆包。 2. RCK 通讯槽接口定义 参见 <RCKSlot.h> 文件 3. RCK 接口定义 参见 <RCKernel.h> 文件 4. RC 的自环接口定义(注: 内部实现 RCK 通讯槽接口) 自环接口用于进程内通过 Command 调用 Application 函数, 便于输出接口统一。 参见 <RC4SL.h> 文件 5. RC 的 TCP 接口定义(注: 内部实现 RCK 通讯槽接口) 参见 <RC4TCP.h> 文件 6. RC 的共享内存通讯接口定义(注: 内部实现 RCK 通讯槽接口) 参见 <RC4SHM.h> 文件 RC 压缩包中含有如下文件: -------------------------------------------------------------------------------- \RC 5.0\_exports\Delphi\RC4SHM.pas \RC 5.0\_exports\Delphi\RC4SL.pas \RC 5.0\_exports\Delphi\RC4TCP.pas \RC 5.0\_exports\Delphi\RCKernel.pas \RC 5.0\_exports\Delphi\RCKSlot.pas \RC 5.0\_exports\VC++\RC4SHM.h \RC 5.0\_exports\VC++\RC4SHM32.lib \RC 5.0\_exports\VC++\RC4SHM64.lib \RC 5.0\_exports\VC++\RC4SL.h \RC 5.0\_exports\VC++\RC4SL32.lib \RC 5.0\_exports\VC++\RC4SL64.lib \RC 5.0\_exports\VC++\RC4TCP.h \RC 5.0\_exports\VC++\RC4TCP32.lib \RC 5.0\_exports\VC++\RC4TCP64.lib \RC 5.0\_exports\VC++\RCKernel.h \RC 5.0\_exports\VC++\RCKernel.lib \RC 5.0\_exports\VC++\RCKernel64.lib \RC 5.0\_exports\VC++\RCKSlot.h \RC 5.0\_rc32\RC4SHM32.dll \RC 5.0\_rc32\RC4SL32.dll \RC 5.0\_rc32\RC4TCP32.dll \RC 5.0\_rc32\RCKernel.dll \RC 5.0\_rc64\RC4SHM64.dll \RC 5.0\_rc64\RC4SL64.dll \RC 5.0\_rc64\RC4TCP64.dll \RC 5.0\_rc64\RCKernel.dll \RC 5.0\classes\RCK\Delphi\RCKernel.pas \RC 5.0\classes\RCK\Delphi\RCKObjs.pas \RC 5.0\classes\RCK\Delphi\RCKSlot.pas \RC 5.0\classes\RCK\VC++\RCKernel.h \RC 5.0\classes\RCK\VC++\RCKernel.lib \RC 5.0\classes\RCK\VC++\RCKernel64.lib \RC 5.0\classes\RCK\VC++\RCKObjs.cpp \RC 5.0\classes\RCK\VC++\RCKObjs.h \RC 5.0\classes\RCK\VC++\RCKSlot.h \RC 5.0\classes\SHM\Delphi\RC4MSrvObj.pas \RC 5.0\classes\SHM\Delphi\RC4SHM.pas \RC 5.0\classes\SHM\VC++\RC4MSrvObj .cpp \RC 5.0\classes\SHM\VC++\RC4MSrvObj .h \RC 5.0\classes\SHM\VC++\RC4SHM.h \RC 5.0\classes\SHM\VC++\RC4SHM32.lib \RC 5.0\classes\SHM\VC++\RC4SHM64.lib \RC 5.0\classes\TCP\Delphi\RC4TCP.pas \RC 5.0\classes\TCP\Delphi\RC4TSrvObj.pas \RC 5.0\classes\TCP\VC++\RC4TCP.h \RC 5.0\classes\TCP\VC++\RC4TCP32.lib \RC 5.0\classes\TCP\VC++\RC4TCP64.lib \RC 5.0\classes\TCP\VC++\RC4TSrvObj.cpp \RC 5.0\classes\TCP\VC++\RC4TSrvObj.h \RC 5.0\demo\__lib32\include\ (KYLib for VC6) \RC 5.0\demo\__lib32\KYLib.lib \RC 5.0\demo\__lib32\KYLib_d.lib \RC 5.0\demo\__lib32\RC4SHM32.lib \RC 5.0\demo\__lib32\RC4SL32.lib \RC 5.0\demo\__lib32\RC4TCP32.lib \RC 5.0\demo\__lib32\RCKernel.lib \RC 5.0\demo\__lib64\include\ (KYLib for VS2008) \RC 5.0\demo\__lib64\KYLib.lib \RC 5.0\demo\__lib64\KYLib_d.lib \RC 5.0\demo\__lib64\RC4SHM64.lib \RC 5.0\demo\__lib64\RC4SL64.lib \RC 5.0\demo\__lib64\RC4TCP64.lib \RC 5.0\demo\__lib64\RCKernel.lib \RC 5.0\demo\AppDemo\release\AppDemo.dll \RC 5.0\demo\AppDemo\release\AppDemo.lib \RC 5.0\demo\AppDemo\units\ADExports.cpp \RC 5.0\demo\AppDemo\units\ADExports.h \RC 5.0\demo\AppDemo\units\DemoApp.cpp \RC 5.0\demo\AppDemo\units\DemoApp.h \RC 5.0\demo\AppDemo\units\RCKernel.h \RC 5.0\demo\AppDemo\units\RCKObjs.cpp \RC 5.0\demo\AppDemo\units\RCKObjs.h \RC 5.0\demo\AppDemo\units\RCKSlot.h \RC 5.0\demo\AppDemo\AppDemo.cpp \RC 5.0\demo\AppDemo\AppDemo.def \RC 5.0\demo\AppDemo\AppDemo.dsp \RC 5.0\demo\AppDemo\AppDemo.dsw \RC 5.0\demo\AppDemo\AppDemo.rc \RC 5.0\demo\AppDemo\resource.h \RC 5.0\demo\TestRC\release\TestRC4SHM.exe \RC 5.0\demo\TestRC\release\TestRC4SL.exe \RC 5.0\demo\TestRC\release\TestRC4TCP.exe \RC 5.0\demo\TestRC\release64\TestRC4SHM.exe \RC 5.0\demo\TestRC\release64\TestRC4SL.exe \RC 5.0\demo\TestRC\release64\TestRC4TCP.exe \RC 5.0\demo\TestRC\units\DemoApp.cpp \RC 5.0\demo\TestRC\units\DemoApp.h \RC 5.0\demo\TestRC\units\RC4SHM.h \RC 5.0\demo\TestRC\units\RC4SL.h \RC 5.0\demo\TestRC\units\RC4TCP.h \RC 5.0\demo\TestRC\units\RCKernel.h \RC 5.0\demo\TestRC\units\RCKObjs.cpp \RC 5.0\demo\TestRC\units\RCKObjs.h \RC 5.0\demo\TestRC\units\RCKSlot.h \RC 5.0\demo\TestRC\units\TestRC4SHM.cpp \RC 5.0\demo\TestRC\units\TestRC4SL.cpp \RC 5.0\demo\TestRC\units\TestRC4TCP.cpp \RC 5.0\demo\TestRC\resource.h \RC 5.0\demo\TestRC\TestRC.dsw \RC 5.0\demo\TestRC\TestRC.sln \RC 5.0\demo\TestRC\TestRC4SHM.dsp \RC 5.0\demo\TestRC\TestRC4SHM.rc \RC 5.0\demo\TestRC\TestRC4SHM.vcproj \RC 5.0\demo\TestRC\TestRC4SL.dsp \RC 5.0\demo\TestRC\TestRC4SL.rc \RC 5.0\demo\TestRC\TestRC4SL.vcproj \RC 5.0\demo\TestRC\TestRC4TCP.dsp \RC 5.0\demo\TestRC\TestRC4TCP.rc \RC 5.0\demo\TestRC\TestRC4TCP.vcproj \RC 5.0\test\rc-tool\AppDemo.dll \RC 5.0\test\rc-tool\RC4SHM32.dll \RC 5.0\test\rc-tool\RC4SL32.dll \RC 5.0\test\rc-tool\RC4TCP32.dll \RC 5.0\test\rc-tool\RCKernel.dll \RC 5.0\test\rc-tool\RCTool.exe \RC 5.0\test\rc-tool\RCTool.ini \RC 5.0\test\rc-tool\RCTool.rtc \RC 5.0\test\rc-tool\RCTool.rte \RC 5.0\test\rc-tool\RCTool.rts \RC 5.0\test\test-rc4shm\RC4SHM32.dll \RC 5.0\test\test-rc4shm\RCKernel.dll \RC 5.0\test\test-rc4shm\TestRC4SHM.dat \RC 5.0\test\test-rc4shm\TestRC4SHM.exe \RC 5.0\test\test-rc4shm\TestRC4SHM.ini \RC 5.0\test\test-rc4shm\TestRC4SHM.txt \RC 5.0\test\test-rc4sl\RC4SL32.dll \RC 5.0\test\test-rc4sl\RCKernel.dll \RC 5.0\test\test-rc4sl\TestRC4SL.exe \RC 5.0\test\test-rc4sl\TestRC4SL.ini \RC 5.0\test\test-rc4sl\TestRC4SL.txt \RC 5.0\test\test-rc4tcp\RC4TCP32.dll \RC 5.0\test\test-rc4tcp\RCKernel.dll \RC 5.0\test\test-rc4tcp\TestRC4TCP.dat \RC 5.0\test\test-rc4tcp\TestRC4TCP.exe \RC 5.0\test\test-rc4tcp\TestRC4TCP.ini \RC 5.0\test\test-rc4tcp\TestRC4TCP.txt --------------------------------------------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值