需求场景:一个服务器的项目a需要用到另外一个服务器项目b的数据。
我这里直接在a里面发请求,请求b对应的地址,b返回的是json类型的数据,然后在a里面解析这一串json就行了。详细经过看图。
1.项目a里面发请求get或者post
//远程连接请求数据
String data = HttpUtils.get("http://192.168.1.112:8081/openapi/carChargeBLH_flightInfoManageSearch.do?flight_date=1", null);
// data = HttpUtils.post("http://192.168.1.112:8081/openapi/carChargeBLH_flightInfoManageSearch.do", "");
2.我这里用到了一个httputils的工具类,也贴上来给大家看看,主要用于便于发送请求。
package com.util;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.Charset;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Map;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.X509TrustManager;
import org.apache.log4j.Logger;
/**
* Http 访问工具类
*
*/
public class HttpUtils {
private final static Logger logger = Logger.getLogger(HttpUtils.class);
/**
* 证书信任管理器(用于https请求)
*
*/
public static class MyX509TrustManager implements X509TrustManager {
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
/**
* GET请求 默认是 utf-8 编码
*
* @param url
* @param params
* @return
*/
public static String get(String url, String params) {
return get(url, params, Charset.forName("utf-8"));
}
/**
* GET请求
*
* @param url
* 请求URL
* @return
*/
public static String get(String url, String params, Charset charset) {
String result = "";
InputStream in = null;
if (null != params && !params.equals("")) {
if (url.contains("?")) {// 包含?,后面加&直接填加
url += "&" + params;
} else {
url += "?" + params;
}
}
try {
URL realUrl = new URL(url);
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性
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.connect();
in = conn.getInputStream();
result = readInputStream(charset, in);
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
try {
if (in != null) {
in.close();
}
} catch (IOException ex) {
}
}
logger.info("result=----" + result);
return result;
}
/**
* POST请求 默认是 utf-8 编码
*
* @param url
* @param params
* @return
*/
public static String post(String url, String params) {
return post(url, params, Charset.forName("utf-8"));
}
/**
* POST请求
*
* @param url
* 请求URL
* @param param
* 请求参数,请求参数格式 name1=value1&name2=value2
* @return
*/
public static String post(String url, String param, Charset charset) {
PrintWriter out = null;
InputStream in = null;
String result = "";
try {
URL realUrl = new URL(url);
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
out = new PrintWriter(conn.getOutputStream());
out.print(param);
out.flush();
in = conn.getInputStream();
result = readInputStream(charset, in);
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
try {
try {
if (out != null) {
out.close();
}
} finally {
if (in != null) {
in.close();
}
}
} catch (Exception ex) {
}
3.解析数据并解析,其中解析出集合有两种方式
方式一:
//用于接收远程发来的数据集合 List
循环json集合里面的数据并且放到lists里面 for (int i = 0; i < array.size(); i++) { //获取一个subObject JsonObject subObject = array.get(i).getAsJsonObject(); //获取属性 String id = subObject.get("id").toString(); String maintePerson = subObject.get("maintePerson").toString(); //保存属性 Mapmap = new HashMap (); map.put("id", id); map.put("maintePerson", maintePerson); //存到list lists.add(map); }
方式二:
//用于接收远程发来的数据集合 List
获取json 对象的对象 里面的list集合 List> lists = new ArrayList >(); //远程连接请求数据 String data = HttpUtils.get("http://192.168.1.112:8081/openapi/carChargeBLH_flightInfoManageSearch.do?flight_date=1", null); // data = HttpUtils.post("http://192.168.1.112:8081/openapi/carChargeBLH_flightInfoManageSearch.do", ""); Gson gson = new Gson(); JsonParser parser = new JsonParser(); //json 转对象 JsonObject object=(JsonObject) parser.parse(data); //根据发过来的数据格式 需要再转一次json 看自己的数据格式,如果只嵌套一层是不用这一步的,如果嵌套多层 还需要多次转json JsonObject object1 = (JsonObject) parser.parse(object.get("json").toString()); //获取json 对象的对象 里面的list集合 List > list = gson.fromJson(object1.get("list").toString(),new TypeToken >>() {}.getType());
> list = gson.fromJson(object1.get("list").toString(),new TypeToken >>() {}.getType());
请求之前的json数据:
转成list之后的数据:
到此全部转换完成