标签:read rop 构造 stream new 打开 ajax tls tcp
今天同事给我一个接口,让我实现将远程的数据的信息通过http的形式获取到插入到本地的数据库当中。
(1)简单的方法是通过ajax传递参数,然后在后台请求数据。
(2)通过http请求获取到数据,然后插入到插入到本地的数据库当中。
实现思路(第一种也可以但是如果使用第一种的话,就需要和页面进行交互,最后选择了第二中方式)
(1)通过写http获取值。
(2)解析json格式的数据
(3)然后连接数据库实现数据的插入操作。
业务代码如下:
package com.message.transfer;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import com.message.transfer.po.Order;
import com.message.transfer.util.Jdbcdemo;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class TranferMain {
/**
* 调用对方接口方法
* @param path 对方或第三方提供的路径
* @param data 向对方或第三方发送的数据,大多数情况下给对方发送JSON数据让对方解析
*/
public static void interfaceUtil(String path,String data) {
try {
URL url = new URL(path);
//打开和url之间的连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
PrintWriter out = null;
//请求方式
conn.setRequestMethod("POST");
String encoding = "UTF-8";
conn.setRequestProperty("Content-Type", "application/json; charset=" + encoding);
//设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
//设置是否向httpUrlConnection输出,设置是否从httpUrlConnection读入,此外发送post请求必须设置这两个
//最常用的Http请求无非是get和post,get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet,
//post与get的 不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内。
conn.setDoOutput(true);
conn.setDoInput(true);
//获取URLConnection对象对应的输出流
out = new PrintWriter(conn.getOutputStream());
out.write(data);
//发送请求参数即数据
// out.print(data);
//缓冲数据
out.flush();
//获取URLConnection对象对应的输入流
InputStream is = conn.getInputStream();
//构造一个字符流缓存
BufferedReader br = new BufferedReader(new InputStreamReader(is));
//这里设置缓冲流,如果用String的话性能降低。
StringBuffer bf = new StringBuffer();
String line = null;
while ((line = br.readLine()) != null) {
/*这里获取到的是一个String的字符串,然后解析json,然后建一个实体类。然后set进去
* 然后使用JDBC插入到数据库当中。
* */
bf.append(line);
}
//得到的全部的json数据。
String str = bf.toString();
//将字符串数据转换为json对象
JSONObject jsonObject = JSONObject.fromObject(str);
String dataStr= jsonObject.get("data").toString();
JSONObject datajsonObject = JSONObject.fromObject(dataStr);
String strList = datajsonObject.get("billList").toString();
//这里将字符串转化为json的对象数组。
JSONArray jsonArray=JSONArray.fromObject(strList);
for(int i=0;i<jsonArray.size();i++){
// 遍历对象数组,然后将数组中属性为billDtlList的对象拿出来。
JSONObject job = jsonArray.getJSONObject(i);
String billDtlStr = job.get("billDtlList").toString();
//billDtlList是一个对象数组,将字符串转化为对象数组,
JSONArray jsonArrayBillDtlStr=JSONArray.fromObject(billDtlStr);
for(int j=0;j<jsonArrayBillDtlStr.size();j++){
JSONObject dtljob = jsonArrayBillDtlStr.getJSONObject(j);
//将实体类的值放到对象的对应的属性当中去。
Order stu=(Order)JSONObject.toBean(dtljob, Order.class);
//将对象插入数据库。
Jdbcdemo.insert(stu);
}
}
//关闭流
is.close();
//断开连接,最好写上,disconnect是在底层tcp socket链接空闲时才切断。如果正在被其他线程使用就不切断。
//固定多线程的话,如果不disconnect,链接会增多,直到收发不出信息。写上disconnect后正常一些。
conn.disconnect();
System.out.println("完整结束");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String sendData = "{\"code\":\"101475\",\"billCode\":\"\",\"startTime\":\"2018-8-1 24:00:00\",\"endTime\":\"2018-8-2 24:00:00\"}";
interfaceUtil("URL地址", sendData);
}
}
通过http实现调接口,实现将远程的数据库数据插入到本地的数据当中的操作。
标签:read rop 构造 stream new 打开 ajax tls tcp
原文地址:https://www.cnblogs.com/gxgd/p/9415827.html