1. REST接口JAVA客户端
为便于开发人员使用REST接口,我们提供了专用的Java客户端。
Java开发人员可通过本章学习如何调用系统的RESTFul web service接口。
如果您之前未接触过REST,可以先通过下面的示例来了解。
1.1. 准备环境
【V6.0之前版本】REST接口客户端需要以下文件支持,请从产品环境的webapps/seeyon/WEB-INF/lib获取:
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之后版本,包括V6.0,V6.1】REST接口客户端需要以下文件支持,请从产品环境的webapps/seeyon/WEB-INF/lib获取:
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
1.2. 获取客户端对象
首先,需要获取客户端对象的实例:
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();
1.3. Token验证
可以调用authenticate方法进行一次性的登录验证,后续的调用就不必传入token:
//验证rest用户
client.authenticate(userName, password);
//绑定登录用户
client.bindUser(loginName);
此时,通过客户端对象client可以访问我们提供的GET、PUT、POST、DELETE接口。
1.4. GET
所有GET类的REST接口均可按此方式调用:
// 访问按登录名获取人员信息的接口
// 期待的返回值类型为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);
1.5. 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);
1.6. 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();
1.7. DELETE
删除类接口示例:
// 删除人员
client.delete("orgMember/?loginName=" + loginName, null,String.class)
1.8. 完整示例
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);
}
}