# 致远REST接口JAVA客户端(不推荐)

接口已过时,不推荐使用致远自己的Rest Client对象,推荐使用开源通用的Http API进行Rest远程调用!

为便于开发人员使用REST接口,我们提供了专用的Java客户端。

Java开发人员可通过本章学习如何调用系统的RESTFul web service接口。

如果您之前未接触过REST,可以先通过下面的示例来了解。

# 适用场景

PC前端、移动端功能接口调用 --所有版本

第三方系统后台调用 --V8.2SP1(不包括)以下版本

# 准备环境

以下文件请从产品环境的webapps/seeyon/WEB-INF/lib获取

V6.0之前版本

seeyon-ctp-core.jar
jackson-core-asl-1.9.8.jar
jackson-core-lgpl-1.9.8.jar
jackson-jaxrs-1.9.2.jar
jackson-mapper-asl-1.9.8.jar
jackson-xc-1.9.2.jar
jersey-client-1.17.1.jar
jersey-core-1.17.1.jar
jersey-json-1.17.1.jar
jersey-server-1.17.1.jar
jersey-servlet-1.17.1.jar

V6.0及之后版本

seeyon-ctp-core.jar
httpmime.jar
httpcore-nio.jar
httpcore.jar
httpclient-win.jar
httpclient-cache.jar
httpclient.jar
json-lib-jdk15.jar
ezmorph.jar
commons-beanutils.jar
jersey-server.jar
jersey-media-multipart.jar
jersey-media-jaxb.jar
jersey-guava.jar
jersey-container-servlet-core.jar
jersey-container-servlet.jar
jersey-common.jar
jersey-client.jar
javax.ws.rs-api.jar
javax.inject.jar
jackson-module-jaxb-annotations.jar
jackson-jaxrs-base.jar
jackson-databind.jar
jackson-annotations.jar
hk2-utils.jar
hk2-locator.jar
hk2-api.jar
javax.annotation-api.jar
jackson-jaxrs-json-provider.jar
jackson-core.jar

# 获取客户端对象

首先,需要获取客户端对象的实例:

import com.seeyon.client.CTPRestClient;
import com.seeyon.client.CTPServiceClientManager;
...
// 指定协议、IP和端口,获取ClientManager
CTPServiceClientManager clientManager = CTPServiceClientManager.getInstance("http://127.0.0.1:8080");

/ 取得REST动态客户机实例
CTPRestClient client = clientManager.getRestClient();

# Token验证

可以调用authenticate方法进行一次性的登录验证,后续的调用就不必传入token:

//验证rest用户
client.authenticate(userName, password);
//绑定登录用户
client.bindUser(loginName);

此时,通过客户端对象client可以访问我们提供的GET、PUT、POST、DELETE接口。

# 各类型接口示例

# GET

// 访问按登录名获取人员信息的接口
// 期待的返回值类型为String,此时返回JSON串
String json = client.get("orgMember/?loginName=" + loginName, String.class);
// 同样的调用,此时将JSON解析为Map返回
Map map = client.get("orgMember/?loginName=" + loginName, Map.class);
// 此处指定了accept,返回值为xml
String xml = client.get("flow/data/-5199818657160149985" , String.class,"application/xml");
// 注意URL中的中文一定要进行编码
client.get("orgMembers/name/" + URLEncoder.encode("中文","UTF-8"), String.class);

# POST

// 新建岗位
Map data = new HashMap() {
    {
        put("orgAccountId", 967547186016371000l);
        put("name", "岗位名称");
    }
};
String post = client.post("orgDepartment", data, String.class);//注意:这里的Map data 切勿传入null,及时data没有信息,也需Map data = new HashMap();

// 新建人员
Map data = new HashMap() {
    {
        put("orgAccountId", orgAccountId);
        put("name", memberName);
        put("code", "");
        put("sortId", 2);
        put("description", "");
        put("orgLevelId", levelId);
        put("orgPostId", postId);
        put("orgDepartmentId", departmentId);
        put("telNumber", "");
        put("birthday", null);
        put("officeNum", "");
        put("emailAddress", "");
        put("loginName", loginName);
    }
};
client.post("member", data, String.class);

新建和修改接口的数据,为了调用方便,通常使用Map,但如果有现成的JSON串,也可以传递字符串,比如:

client.post("flow/H0001",
    "{"senderLoginName":"sender","subject":"这是用JSON发的","data":"HTML正文","attachments":[-1,1]}",
    Long.class);

# PUT

// 修改部门的信息
Map data = new HashMap() {
    {
        put("id", -2332227039700957764l);
        put("name", "部门名称");
    }
};
String department = client.put("orgDepartment", data, String.class);//注意:这里的Map data 切勿传入null,及时data没有信息,也需Map data = new HashMap();

# DELETE

// 删除人员
client.delete("orgMember/?loginName=" + loginName, null,String.class)

# 完整示例

    package com.seeyon.ctp.rest.resources;
    import java.io.UnsupportedEncodingException;
    import java.net.URLEncoder;
    import java.util.HashMap;
    import java.util.Map;

    import com.seeyon.client.CTPRestClient;
    import com.seeyon.client.CTPServiceClientManager;

    public class RestWebServiceClient {

        //REST用户登录名
        private String userName = "macx";
        //REST用户密码
        private String password = "123456";
        //定义REST动态客户机
        private CTPRestClient client = null;

        public RestWebServiceClient(){
            //取得指定服务主机的客户端管理器。
            //参数为服务主机地址,包含{协议}{Ip}:{端口},如http://127.0.0.1:8088
            CTPServiceClientManager clientManager = CTPServiceClientManager.getInstance("http://127.0.0.1:8088");
            //取得REST动态客户机。
            client = clientManager.getRestClient();
            //登录校验,成功返回true,失败返回false,此过程并会把验证通过获取的token保存在缓存中
            //再请求访问其他资源时会自动把token放入请求header中。
            client.authenticate(userName, password);
        }

        public void testRest(){
            //URL为中文的部分要进行编码
            String loginName = URLEncoder.encode("张三", "UTF-8");
            //将当前请求绑定具体的用户
            client.bindUser(loginName);
            /*
            * get请求方式代码示例
             */

            //参数类型为QueryParam
            //根据登录名获取人员信息
            client.get("orgMember?loginName="+loginName, String.class);

            try {
                //URL为中文的部分要进行编码
                client.get("orgMember?loginName="+loginName, String.class);
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }

            //参数类型为PathParam
            //根据人员ID获取人员信息
            client.get("orgMember/-8361687019900091749", String.class);

            //参数类型为QueryParam和PathParam
            //根据人员电话号码和单位ID获取人员信息
            client.get("orgMember/telephone/15810557555?unitId=4526361456900091749", String.class);

            /*
             * put请求方式代码示例
             * 按照人员ID更新人员
             */
            Map map = new HashMap();
            map.put("id", -8361687019900091749L);
            map.put("type", 1);
            map.put("name", "macx");
            map.put("enabled", true);
            map.put("code", 8);
            map.put("orgLevelId", 2345678);
            //省略其他属性的设置
            //...
            String uri = "orgMember";
            client.put(uri, map, String.class);

            /*
             * delete请求方式代码示例
             * 按照人员ID删除人员
             */
            String url = "orgMember/-8361687019900091749";
            client.delete(url, null, String.class);

            /*
             * POST请求方式代码示例
             * 新增人员
             */
            Map beanMap = new HashMap();
            beanMap.put("id", 123456789);
            beanMap.put("orgAccountId", 1111111);
            beanMap.put("name", "macx11");
            beanMap.put("orgPostId", 9999999);
            beanMap.put("orgDepartmentId", 88888888);
            beanMap.put("orgLevelId", 23456789);
            beanMap.put("loginName", "macx11");
            //省略其他属性的设置
            //...
            String addUri = "orgMember";
            client.post(addUri, beanMap, String.class);
        }
    }