package com.lvtu.utils.restful;
import java.text.MessageFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.lvtu.utils.HttpInvoker;
/**
* Restful接口访问工具
* @author wxliyong
* @date 2016-8-31 14:25:18
*/
public class RestfulUtils {
private static final Logger logger = Logger.getLogger(RestfulUtils.class);
/** 访问的基本URL */
private String baseUrl;
public RestfulUtils(String baseUrl) {
this.baseUrl = baseUrl;
}
public <T> T invoke(Class<T> resutlClazz, RESTFUL_API api, Object... args) {
return invoke(resutlClazz, new HashMap<String, String>(), api, args);
}
public <T> T invoke(Class<T> resutlClazz, Map<String, String> param, RESTFUL_API api, Object... args) {
String jsonResult = invoke(param, api, args);
if(jsonResult == null || jsonResult.trim().equals("")) {
logger.error("接口返回为空,无法解析,api: " + api.getInfo());
return null;
}
T result = null;
try {
result = JSONObject.parseObject(jsonResult, resutlClazz);
} catch (Exception e) {
logger.error(e.getMessage(), e);
logger.error("jsonResult: " + jsonResult);
}
return result;
}
public <T> List<T> invokeListResult(Class<T> resutlClazz, RESTFUL_API api, Object... args) {
return invokeListResult(resutlClazz, new HashMap<String, String>(), api, args);
}
public <T> List<T> invokeListResult(Class<T> resutlClazz, Map<String, String> param, RESTFUL_API api, Object... args) {
String jsonResult = invoke(param, api, args);
if(jsonResult == null || jsonResult.trim().equals("")) {
logger.error("接口返回为空,无法解析,api: " + api.getInfo());
return null;
}
List<T> result = null;
try {
result = JSONArray.parseArray(jsonResult, resutlClazz);
} catch (Exception e) {
logger.error(e.getMessage(), e);
logger.error("jsonResult: " + jsonResult);
}
return result;
}
private String invoke(Map<String, String> param, RESTFUL_API api, Object... args) {
String url = api.getUrl(baseUrl, args);
String jsonResult = null;
try {
logger.info(url + " - start");
if(api.getHttpMethod().equals(HTTP_METHOD.POST)) {
jsonResult = HttpInvoker.post(url, param);
} else {
jsonResult = HttpInvoker.get(url, param);
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
return null;
} finally {
logger.info(url + " - end");
}
return jsonResult;
}
public enum RESTFUL_API {
GET_ORDER_PROMOTION_INFO("/pp/v1/customer/payment/order/orderPayPaymentInfo?orderId={0}", HTTP_METHOD.GET, "根据订单号获取订单的支付立减信息"),
PAY_PAYMENT_RULE("/pp/v1/customer/payment/pay/app/payPaymentRule?orderId={0}&productId={1}&platform={2}", HTTP_METHOD.GET, "支付立减信息");
private String api;
private String info;
private HTTP_METHOD httpMethod;
private RESTFUL_API(String api, HTTP_METHOD httpMethod, String info) {
this.api = api;
this.info = info;
this.httpMethod = httpMethod;
}
public String getUrl(String baseUrl, Object... args) {
MessageFormat msgFormat = new MessageFormat(baseUrl + this.api);
return msgFormat.format(args);
}
public String getInfo() {
return info;
}
public HTTP_METHOD getHttpMethod() {
return httpMethod;
}
}
public enum HTTP_METHOD {
POST,GET,UPDATE,DELETE
}
}
import java.text.MessageFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.lvtu.utils.HttpInvoker;
/**
* Restful接口访问工具
* @author wxliyong
* @date 2016-8-31 14:25:18
*/
public class RestfulUtils {
private static final Logger logger = Logger.getLogger(RestfulUtils.class);
/** 访问的基本URL */
private String baseUrl;
public RestfulUtils(String baseUrl) {
this.baseUrl = baseUrl;
}
public <T> T invoke(Class<T> resutlClazz, RESTFUL_API api, Object... args) {
return invoke(resutlClazz, new HashMap<String, String>(), api, args);
}
public <T> T invoke(Class<T> resutlClazz, Map<String, String> param, RESTFUL_API api, Object... args) {
String jsonResult = invoke(param, api, args);
if(jsonResult == null || jsonResult.trim().equals("")) {
logger.error("接口返回为空,无法解析,api: " + api.getInfo());
return null;
}
T result = null;
try {
result = JSONObject.parseObject(jsonResult, resutlClazz);
} catch (Exception e) {
logger.error(e.getMessage(), e);
logger.error("jsonResult: " + jsonResult);
}
return result;
}
public <T> List<T> invokeListResult(Class<T> resutlClazz, RESTFUL_API api, Object... args) {
return invokeListResult(resutlClazz, new HashMap<String, String>(), api, args);
}
public <T> List<T> invokeListResult(Class<T> resutlClazz, Map<String, String> param, RESTFUL_API api, Object... args) {
String jsonResult = invoke(param, api, args);
if(jsonResult == null || jsonResult.trim().equals("")) {
logger.error("接口返回为空,无法解析,api: " + api.getInfo());
return null;
}
List<T> result = null;
try {
result = JSONArray.parseArray(jsonResult, resutlClazz);
} catch (Exception e) {
logger.error(e.getMessage(), e);
logger.error("jsonResult: " + jsonResult);
}
return result;
}
private String invoke(Map<String, String> param, RESTFUL_API api, Object... args) {
String url = api.getUrl(baseUrl, args);
String jsonResult = null;
try {
logger.info(url + " - start");
if(api.getHttpMethod().equals(HTTP_METHOD.POST)) {
jsonResult = HttpInvoker.post(url, param);
} else {
jsonResult = HttpInvoker.get(url, param);
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
return null;
} finally {
logger.info(url + " - end");
}
return jsonResult;
}
public enum RESTFUL_API {
GET_ORDER_PROMOTION_INFO("/pp/v1/customer/payment/order/orderPayPaymentInfo?orderId={0}", HTTP_METHOD.GET, "根据订单号获取订单的支付立减信息"),
PAY_PAYMENT_RULE("/pp/v1/customer/payment/pay/app/payPaymentRule?orderId={0}&productId={1}&platform={2}", HTTP_METHOD.GET, "支付立减信息");
private String api;
private String info;
private HTTP_METHOD httpMethod;
private RESTFUL_API(String api, HTTP_METHOD httpMethod, String info) {
this.api = api;
this.info = info;
this.httpMethod = httpMethod;
}
public String getUrl(String baseUrl, Object... args) {
MessageFormat msgFormat = new MessageFormat(baseUrl + this.api);
return msgFormat.format(args);
}
public String getInfo() {
return info;
}
public HTTP_METHOD getHttpMethod() {
return httpMethod;
}
}
public enum HTTP_METHOD {
POST,GET,UPDATE,DELETE
}
}