java请求http页面的json格式数据,并转换存入数据库

 

仅供大家参考,如内容中有不对的地方请大家谅解,并指出,我会及时改正,谢谢!!!

在我参与的实际项目中,有一个需求是,给你一个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的话则不需要考虑

仅供大家参考,如内容中有不对的地方请大家谅解,并指出,我会及时改正,谢谢!!!

猜你喜欢

转载自blog.csdn.net/Java_monkeys/article/details/81296167
今日推荐