原文地址: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()); } }