Jersey实现Client端:GET/PUT/POST/DELETE
原文地址:Jersey客户端API调用REST风格的Web服务
【节选】
要开始使用 Jersey 客户端 API,你首先需要创建一个 com.sun.jersey .api.client.Client 类的实例:
import com.sun.jersey.api.client.Client;
Client client = Client.create();
Client 类是创建一个 RESTful Web Service 客户端的主要配置点。你可以使用它来配置不同的客户端属性和功能,并且指出使用哪个资源提供者。创建一个 Client 类的实例是一个比较昂贵的操作,所以尽量避免创建一些不需要的客户端实例。比较好的方式是尽可能地复用已经存在的实例。
当你创建完一个 Client 类的实例后,你可以开始使用它。无论如何,在发出请求前,你需要创建一个 WebResource 对象来封装客户端所需要的 Web 资源。
Web 资源创建了一个 WebResponse 对象:
import com.sun.jersey.api.client.WebResource;
WebResource webResource = c.resource("http://example.com/base");
通过使用 WebResource 对象来创建要发送到 Web 资源的请求,以及处理从 Web 资源返回的响应。例如,你可以使用 WebResource 对象来发送 HTTP GET、PUT、POST 以及 DELETE 请求。
【实例】
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.rimi.medical.common.domain.ResultPojo;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.core.util.MultivaluedMapImpl; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map; /**
* JerseyAPi客户端
* Created by libt on 2015/01/30.
*/
public class JerseyClientUtil { private static final String BIGDATA_API_URL = ReadSettingProperties.getValue("bigdata_api_url"); /**
* post方法
*
* @param method 方法名
* @param param 参数
* @return 返回值
*/
public static ResultPojo postMethod(String method, String param) {
ResultPojo resultPojo = new ResultPojo();
ClientResponse response = null;
try {
Client client = Client.create();
WebResource resource = client.resource(BIGDATA_API_URL + method);
response = resource.type(MediaType.APPLICATION_JSON_TYPE).post(ClientResponse.class, param);
int status = response.getStatus();
String data = response.getEntity(String.class);
if (status == 200) {
JSONObject jsonObject = JSON.parseObject(data);
resultPojo.setStatus(jsonObject.getInteger("status"));
resultPojo.setData(data);
} else {
resultPojo.setStatus(response.getStatus());
resultPojo.setData(data);
}
} catch (Exception e) {
resultPojo.setStatus(500);//服务器异常
resultPojo.setErrorMsg(e.getMessage());
} finally {
if (response != null) {
response.close();
}
}
return resultPojo;
} /**
* get方法
* 例如:consultation/recommend?startDate=201412030253&endDate=201412020253
* @param method 方法名
* @param param 参数
* @return 返回值
*/
public static ResultPojo getMethod(String method, String param) {
ResultPojo resultPojo = new ResultPojo();
ClientResponse response = null;
try {
Client client = Client.create();
WebResource resource = client.resource(BIGDATA_API_URL + method);
response = resource.queryParams(parseJSON2Map(param)).accept(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class);
int status = response.getStatus();
String data = response.getEntity(String.class);
if (status == 200) {
JSONObject jsonObject = JSON.parseObject(data);
resultPojo.setStatus(jsonObject.getInteger("status"));
resultPojo.setData(data);
} else {
resultPojo.setStatus(response.getStatus());
resultPojo.setData(response.getEntity(String.class));
}
} catch (Exception e) {
e.printStackTrace();
resultPojo.setStatus(500);//服务器异常
resultPojo.setErrorMsg(e.getMessage());
} finally {
if (response != null) {
response.close();
}
}
return resultPojo;
} /**
* get方法
* 例如:consultation/recommend/A1000037B04B8C
* @param method 方法名
* @param param 参数
* @return 返回值
*/
public static ResultPojo getMethodOnly(String method, String param) {
ResultPojo resultPojo = new ResultPojo();
ClientResponse response = null;
try {
Client client = Client.create();
WebResource resource = client.resource(BIGDATA_API_URL + method + param);
response = resource.accept(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class);
int status = response.getStatus();
String data = response.getEntity(String.class);
if (status == 200) {
JSONObject jsonObject = JSON.parseObject(data);
resultPojo.setStatus(jsonObject.getInteger("status"));
resultPojo.setData(data);
} else {
resultPojo.setStatus(response.getStatus());
resultPojo.setData(response.getEntity(String.class));
}
} catch (Exception e) {
e.printStackTrace();
resultPojo.setStatus(500);//服务器异常
resultPojo.setErrorMsg(e.getMessage());
} finally {
if (response != null) {
response.close();
}
}
return resultPojo;
} public static MultivaluedMap parseJSON2Map(String jsonStr) {
MultivaluedMap queryParams = new MultivaluedMapImpl();
//最外层解析
JSONObject json = JSON.parseObject(jsonStr);
for (Map.Entry<String, Object> entry : json.entrySet()) {
Object v = entry.getValue();
//如果内层还是数组的话,继续解析
if (v instanceof JSONArray) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Iterator<Object> it = ((JSONArray) v).iterator();
while (it.hasNext()) {
JSONObject json2 = (JSONObject) it.next();
list.add(parseJSON2Map(json2.toJSONString()));
}
queryParams.add(entry.getKey(), list);
} else {
queryParams.add(entry.getKey(), v);
}
}
return queryParams;
} public static void main(String[] args) { // ResultPojo resultPojo = postMethod("bfr/bfr_choices", "{\"userid\":\"00004\",\"createTime\":\"2014-09-23 16:19:23\",\"bmiScore\":\"80\",\"imageNum\":\"01\",\"type\":\"0\",\" info \":\"个人身体质量分析正常\"}");
ResultPojo resultPojo = getMethod("recommendInfo/query", "{\"endDate\":\"201412020253\",\"startDate\":\"201410010253\"}");
// ResultPojo resultPojo = getMethodOnly("consultation/recommend/", "A1000037B04B8C");
System.out.println(resultPojo.getStatus());
System.out.println(resultPojo.getErrorMsg()); }
}
Jersey实现Client端:GET/PUT/POST/DELETE的更多相关文章
- Eureka服务注册中心错误:com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect
报错信息 14:43:45.484 [main] INFO com.netflix.discovery.DiscoveryClient - Getting all instance registry ...
- Linux下的C Socket编程 -- 简介与client端的处理
Linux下的C Socket编程(一) 介绍 Socket是进程间通信的方式之一,是进程间的通信.这里说的进程并不一定是在同一台机器上也有可能是通过网络连接的不同机器上.只要他们之间建立起了sock ...
- Python自动化之rabbitmq rpc client端代码分析(原创)
RPC调用client端解析 import pika import uuid # 建立连接 class FibonacciRpcClient(object): def __init__(self): ...
- 用C#基于WCF创建TCP的Service供Client端调用
本文将详细讲解用C#基于WCF创建TCP的Service供Client端调用的详细过程 1):首先创建一个Windows Service的工程 2):生成的代码工程结构如下所示 3):我们将Servi ...
- 从零开始学习Node.js例子四 多页面实现数学运算 续二(client端和server端)
1.server端 支持数学运算的服务器,服务器的返回结果用json对象表示. math-server.js //通过监听3000端口使其作为Math Wizard的后台程序 var math = r ...
- Zookeeper全解析——Client端(转)
Zookeeper的Client直接与用户打交道,是我们使用Zookeeper的interface.了解ZK Client的结构和工作原理有利于我们合理的使用ZK,并能在使用中更早的发现问题.本文将在 ...
- JDE报表开发笔记(Client端导出Excel乱码)
之前导出Excel时没发生任何问题, Client端PL/SQL字符集为UTF-8 Oracle JDE E910字符集为UTF-8 解决方式:添加指定用户的字符集(上图即为修改后的用户字符集) 角色 ...
- JS读取client端的文件的代码片段
JS读取client端的文件内容的代码片段 if(window.FileReader){ var html5file = this.pipeDetailFileUpLoader._files[0]; ...
- 获得WCF Client端的本地端口 z
当WCF调用远程服务时,显示该调用的网速或流量.其中比较关键的一步就是需要获得WCF Client端的本地端口,原来以为是个简单的事情,结果查了1个多小时谷歌,硬是没找到好的法子,只有自己动手了. ...
随机推荐
- UVA 1600 Patrol Robert 巡逻机器人 (启发搜索BFS)
非常适合A*的一道题. 比普通的迷宫问题加一个信息k表示当前穿过的障碍物的数量. #include<cstdio> #include<cstring> #include< ...
- Netbackup驱动器常用命令vmoprcmd
1.vmoprcmd vmoprcmd – 对驱动器执行操作员功能 大纲 vmoprcmd -devmon [pr | ds | hs] [-h device_host] default_operat ...
- python基础一 day15 复习
迭代器和生成器迭代器 可迭代协议 —— 含有iter方法的都是可迭代的 迭代器协议 —— 含有next和iter的都是迭代器 特点 节省内存空间 方便逐个取值,一个迭代器只能取一次.生成器 —— 迭代 ...
- 脚手架创建一个React项目
一.安装 1.安装node.js 官网地址 https://nodejs.org/en/ 进入后点击下载,官方网站会根据你的系统类型推荐最适合你安装的版本.(如果已经安装了node.js跳过此步)如下 ...
- Return Largest Numbers in Arrays-freecodecamp算法题目
Return Largest Numbers in Arrays(找出多个数组中的最大数) 要求 大数组中包含了4个小数组,分别找到每个小数组中的最大值,然后把它们串联起来,形成一个新数组. 思路 用 ...
- 51nod——1548 欧姆诺姆和糖果
一开始以为是贪心,然后发现没法贪.暴力枚举肯定T,于是用约束关系优化: 假设wr >= wb, 第一种情况:wr >= sqrt (c), 则此时最多吃c / wr个r,且c / wr & ...
- 【数学 BSGS】bzoj2242: [SDOI2011]计算器
数论的板子集合…… Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最 ...
- 不依赖Hibernate的万能BaseDao---模仿了Hibernate底层的原理
今天写了个万能的BaseDao:有了这个BaseDao以后的Dao层直接继承这个BaseDao就能直接操作数据库了,增删改查,这是一个简易的Hibernate模型.写这个BaseDao的原因是最近在学 ...
- angular5 HttpInterceptor使用
HttpInterceptor接口是ng的http请求拦截器,当需要拦截http请求,可以实现该接口. 1.创建HttpInterceptor 的实现类,并使用@Injectable()注解 @Inj ...
- PHP 代码优化建议
1.尽量静态化: 如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍.当然了,这个测试方法需要在十万级以上次执行,效果才明显.其实静态方法和非静态方法的效率 ...