仅供大家参考,如内容中有不对的地方请大家谅解,并指出,我会及时改正,谢谢!!!
在我参与的实际项目中,有一个需求是,给你一个http网址(如:http://www.baidu.com),让你访问网页的值,这个值为json格式,让你获取到并存入数据库,以备用;以下为实现步骤,仅供大家参考:
示例json:
{ "test1": "wx9fdb8ble7ce3c68f", "test2": "123456789", "testData1": { "testdatason1": "97895455" "testdatason2":3, "testData2": [ { "testshuzu1":"12" "testshuzu1":"11" }, { "testshuzu2":"13" "testshuzu2":"14" }, { "testshuzu3":"15" "testshuzu3":"16" } ] } }
1.工具方法:
释意:
1.url就是你要获取数据的网址(如:http://www.baidu.com)
2.params在这里可以一个值(key不能为空,但value可以,例如map(key:test1,value:“”))也可以在map中多个值
/**
* post请求(用于key-value格式的参数)
*/
public static String doPost(String url, Map params) {
BufferedReader in = null;
try {
// 定义HttpClient
HttpClient client = new DefaultHttpClient();
// 实例化HTTP方法
HttpPost request = new HttpPost();
request.setURI(new URI(url));
// 设置参数
if(params!=null && params.size()>0){
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
for (Iterator iter = params.keySet().iterator(); iter.hasNext(); ) {
String name = (String) iter.next();
String value = String.valueOf(params.get(name));
nvps.add(new BasicNameValuePair(name, value));
}
request.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
}
HttpResponse response = client.execute(request);
int code = response.getStatusLine().getStatusCode();
if (code == 200) { // 请求成功
in = new BufferedReader(new InputStreamReader(response
.getEntity().getContent(), "utf-8"));
StringBuffer sb = new StringBuffer("");
String line = "";
String NL = System.getProperty("line.separator");
while ((line = in.readLine()) != null) {
sb.append(line + NL);
}
in.close();
return sb.toString();
} else {
System.out.println("状态码:" + code);
return null;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
2.项目中实际方法:
public void addTConstructionSupervision() {
Map map = new HashMap();
map.put("maps","");
String url1 = "http://xxzx.zonwi.net:8009/getallmaintain";
String str1 = doPost(url1,map);
JSONObject json1= JSON.parseObject(str1);
JSONArray jsonArray = json1.getJSONArray("result");
int k = jsonArray.size();
if(k>0&&jsonArray!=null)
{
for(int i=1;i<k;i++)
{
TConstructionSupervision tcs = new TConstructionSupervision();
/**
*此处向对象中的每个属性赋值
*/
TConstructionSupervision tcsv = tcvnservice.get(tcs.getId());
if(tcsv==null||"".equals(tcsv))
{
dao.insert(tcs);
}
}
}
}
3.定时器执行方法
@Scheduled(cron="0 0/30 * * * ?") //每30min执行一次
@Override
public void savetsc() {
logger.info("向数据库插入施工监管数据");
addTConstructionSupervision();
}
查询的时候,直接写定时器向数据库中插入数据,这里的定时器我用的是@Scheduled注解,还有其他的方式;想学习定时器的请在以下CSDN网址学习:
java定时任务的几种实现方式:https://blog.csdn.net/kegumingxin2626/article/details/72854823
spring定时任务详解(@Scheduled注解):https://blog.csdn.net/qq_33556185/article/details/51852537
注意点:
1.json转换,赋值的时候判空
2.json是否有重复数据,如果有需要判断,否则在插入的时候回违反主键唯有约束(前提,json中有主键),如自己生成uuid的话则不需要考虑