先定义Http请求的方式
定义一个工具类,工具类代码如下:
package com.nan.util;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map;
import java.util.Set;
//import org.apache.log4j.Logger;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
public class CascadeHttpUtil {
// protected static Logger logger = Logger.getLogger(CascadeHttpUtil.class);
/**
* 功能: post形式发送数据
* @param urlPath 对方地址
* @param json 要传送的数据
* @return
* @throws Exception
*
*/
public static Map<String,Object> sendPost(String url, String json){
Map<String,Object> mresult = null;
OutputStreamWriter out = null;
BufferedReader in = null;
StringBuilder result = new StringBuilder();
try {
URL realUrl = new URL(url);
HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
// 打开和URL之间的连接
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");// POST方法
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
//conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Type", "application/json");
conn.connect();
// 获取URLConnection对象对应的输出流
out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
// 发送请求参数
out.write(URLEncoder.encode(json, "UTF-8"));
// flush输出流的缓冲
out.flush();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(
new InputStreamReader(conn.getInputStream(),"UTF-8"));
String line;
while ((line = in.readLine()) != null) {
result.append(line);
}
//获取返回数据
String jsonData = URLDecoder.decode(result.toString(), "UTF-8");
//返回结果
mresult = JSON.parseObject(jsonData);
} catch (Exception e) {
mresult = CodeResult.makeMap(CodeResult._codeResult200, e.getMessage());
e.printStackTrace();
}
//使用finally块来关闭输出流、输入流
finally{
try{
if(out!=null){
out.close();
}
if(in!=null){
in.close();
}
} catch(IOException ex){
mresult = CodeResult.makeMap(CodeResult._codeResult200, ex.getMessage());
ex.printStackTrace();
}
}
return mresult;
}
/**
* 向指定URL发送GET方法的请求
* @param url 发送请求的URL
* @param params 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return URL 所代表远程资源的响应结果
*/
public static Map<String,Object> sendGet(String url, String params) {
Map<String,Object> mresult = CodeResult.makeMap(CodeResult.codeResult200, "请求成功");
String result = "";
BufferedReader in = null;
try {
String urlNameString = url + "?" + params;
URL realUrl = new URL(urlNameString);
// 打开和URL之间的连接
HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
// 设置通用的请求属性
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 建立实际的连接
connection.connect();
// 获取所有响应头字段
//Map<String, List<String>> map = connection.getHeaderFields();
// 定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(connection.getInputStream(),"UTF-8"));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
mresult.put("data", result);
} catch (Exception e) {
mresult.put("code", CodeResult._codeResult200);
mresult.put("msg", e.toString());
e.printStackTrace();
}
// 使用finally块来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
mresult.put("code", CodeResult._codeResult200);
mresult.put("msg", e2.toString());
e2.printStackTrace();
}
}
return mresult;
}
/**
* 向指定URL发送GET方法的请求
* @param url 发送请求的URL
* @param param 请求参数,Map 请求参数应该是 name1=value1&name2=value2 的形式。
* @return URL 所代表远程资源的响应结果
*/
public static Map<String,Object> sendGetMap(String url, Map<String, Object> param) {
Map<String,Object> mresult = CodeResult.makeMap(CodeResult.codeResult200, "请求成功");
String result = "";
BufferedReader in = null;
StringBuilder sb = new StringBuilder();
try {
String requestParams = "";
Set<String> keySet = param.keySet();
int i=0;
for (String k : keySet) {
if (i==keySet.size()-1) {
boolean chinese = StringUtil.isContainChinese(String.valueOf(param.get(k)));
if(chinese){
requestParams+=k+"="+URLEncoder.encode(String.valueOf(param.get(k)), "utf-8");
}else{
requestParams+=k+"="+param.get(k);
}
} else {
boolean chinese = StringUtil.isContainChinese(String.valueOf(param.get(k)));
if(chinese){
requestParams+=k+"="+URLEncoder.encode(String.valueOf(param.get(k)), "utf-8")+"&";
}else{
requestParams+=k+"="+param.get(k)+"&";
}
}
i++;
}
String urlNameString =null;
if(url.contains("?")){
urlNameString = url + "&" + requestParams;
}else{
urlNameString = url + "?" + requestParams;
}
URL realUrl = new URL(urlNameString);
// 打开和URL之间的连接
HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
// 设置通用的请求属性
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 建立实际的连接
connection.connect();
// 获取所有响应头字段
Map<String, List<String>> map = connection.getHeaderFields();
// 定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(connection.getInputStream(),"UTF-8"));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
mresult.put("data", result);
} catch (Exception e) {
mresult.put("code", CodeResult._codeResult200);
mresult.put("msg", e.toString());
e.printStackTrace();
}
// 使用finally块来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
mresult.put("code", CodeResult._codeResult200);
mresult.put("msg", e2.toString());
e2.printStackTrace();
}
}
return mresult;
}
/*
* 功能: postBody形式发送数据
* @param urlPath 对方地址
* @param json 要传送的数据
* @return
* @throws Exception
*
*/
public static Map<String,Object> sendJsonData(String urlPath, String json) throws Exception{
Map<String,Object> mresult = CodeResult.makeMap(CodeResult.codeResult200, "请求成功");
// request
URL url = new URL(urlPath);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
// 设置doOutput属性为true表示将使用此urlConnection写入数据
urlConnection.setDoOutput(true);
urlConnection.setDoInput(true);
// 定义待写入数据的内容类型,我们设置为application/x-www-form-urlencoded类型
urlConnection.setRequestProperty("content-type","application/text");
// 得到请求的输出流对象
OutputStreamWriter out = new OutputStreamWriter(urlConnection.getOutputStream());
// 把数据写入请求的Body
out.write(URLEncoder.encode(json, "UTF-8"));//编码
out.flush();
out.close();
/*
* 得到响应对象
* @param urlConnection
* @return 响应对象
* @throws IOException
*/
InputStream in = urlConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in,"UTF-8"));
StringBuffer temp = new StringBuffer();
String line = bufferedReader.readLine();
while (line != null) {
temp.append(line).append("\r\n");
line = bufferedReader.readLine();
}
bufferedReader.close();
//返回的json对象
JSONObject jsonObj = JSONObject.parseObject(temp.toString());
if(CodeResult.codeResult200.equals(jsonObj.getString("code"))){
mresult = CodeResult.makeMap(CodeResult.codeResult200,"调用成功","UTF-8");
}else{
mresult = CodeResult.makeMap(jsonObj.getString("code"),jsonObj.getString("message"));
}
return mresult;
}
//将map型转为请求参数型
public static String urlencode(Map<String,Object> data) {
StringBuilder sb = new StringBuilder();
for (Map.Entry i : data.entrySet()) {
try {
sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue()+"","UTF-8")).append("&");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return sb.toString();
}
}
返回一个结果参数类
代码如下:
import java.util.LinkedHashMap;
import java.util.Map;
public class CodeResult {
public static final String _codeResult200 = "-200";//操作成功
public static final String codeResult200 = "200";// 请求成功
//下为通用状态--开始
public static final String _codeResult10 = "-10";//数据签名不存在
public static final String _codeResult11 = "-11";//无效的数据签名
public static final String _codeResult20 = "-20";//时间戳不存在
public static final String _codeResult21 = "-21";//无效的时间戳
public static final String _codeResult30 = "-30";//无效的数据返回格式
public static final String _codeResult40 = "-40";//访问的服务不存在
public static final String _codeResult50 = "-50";//用户不存在
public static final String _codeResult60 = "-60";//无效的签名方式
public static final String _codeResult70 = "-70";//用户没有权限访问服务
public static final String _codeResult80 = "-80";//系统错误
public static final String _codeResult90 = "-90";//恶意访问
//结束
public static final String codeResult100 = "-100"; //参数异常
public static final String codeResult110 = "-110"; //AK不存在
public static final String codeResult120 = "-120"; //timestamp超时
public static final String codeResult130 = "-130"; //服务已停用
public static final String codeResult140 = "-140";// 服务未申请
public static final String codeResult150 = "-150";// 服务申请时间失效
public static final String codeResult160 = "-160";// 服务申请权限已回收
public static final String codeResult170 = "-170";// appId非法或者未授权
public static final String codeResult180 = "-180";//代理接口错误类型
// public static final String _codeResult10 = "-10";// 错误的请求KEY
// public static final String _codeResult20 = "-20";// KEY过期
// public static final String _codeResult30 = "-30";// 系统内部异常
// public static final String _codeResult40 = "-40";// 接口维护
// public static final String _codeResult50 = "-50";// 接口停用
// public static final String _codeResult60 = "-60";// 用户名错误
// public static final String _codeResult70 = "-70";// 无权限访问
public static Map<String,Object> makeMap(String code, String msg,Object data) {
Map<String,Object> m = new LinkedHashMap<String,Object>();
m.put("code",code);
m.put("msg",msg);
m.put("data",data);
return m;
}
public static Map<String,Object> makeMap(String code, String msg) {
Map<String,Object> m = new LinkedHashMap<String,Object>();
m.put("code",code);
m.put("msg",msg);
return m;
}
public static Map<String,Object> makeMap() {
Map<String,Object> m = new LinkedHashMap<String,Object>();
m.put("code",codeResult200);
m.put("msg","请求成功");
return m;
}
public static Map<String,Object> makeMap(Map<String,Object> result, String msg) {
result.put("code",_codeResult200);
result.put("msg", msg);
return result;
}
}
请求方法代码示例如下:
public static void getAllOrgan() {
String url = "http://localhost:8080/irsp/cascade/catalog/query";
Map<String, Object> mapData = new HashMap<String, Object>();
mapData.put("ak", "ac8999bc1409448baf180838bbcb63e6"); //ak
mapData.put("codeId", "23f56ca568bc4435b30e3f41e9ac64ba");
mapData.put("pageIndex", "1");
mapData.put("pageSize", "1");
String json = JSON.toJSONString(mapData);
Map<String,Object> result = CascadeHttpUtil.sendPost(url, json);
System.out.println(result);
}
接口代码如下所示:
这个代码是在irsp项目里面,项目端口号是8080,请求的参数方法irsp/cascade/catalog/query
/**
* 获取全部组织机构
* @return
*/
@RequestMapping(value="/getAllOrgan", method=RequestMethod.POST)
@ResponseBody
public ResponseEntity<Map<String,Object>> getAllOrgan(@RequestBody String json) {
Map<String, Object> result = CodeResult.makeMap();
String resultJson = null;
String org = null;
try {
String jsonData = URLDecoder.decode(json, "UTF-8");
Map<String, ?> mapParams = CascadeJsonUtil.json2Map(jsonData);
String ak = mapParams.get("ak").toString();
String codeId = mapParams.get("codeId").toString();
String pageIndex = mapParams.get("pageIndex").toString();
resultJson = JSONObject.toJson(result);
org = URLEncode.encode(resultJson,"UTF-8");
System.out.println(mapParams);
} catch (Exception e) {
CodeResult.makeMap(result, e.getMessage());
e.printStackTrace();
}
return org;
}
