Rumah  >  Artikel  >  Java  >  Bagaimanakah Java memanggil antara muka untuk mendapatkan data json dan menyimpannya ke pangkalan data selepas menghuraikannya?

Bagaimanakah Java memanggil antara muka untuk mendapatkan data json dan menyimpannya ke pangkalan data selepas menghuraikannya?

WBOY
WBOYke hadapan
2023-05-14 10:58:051762semak imbas

    Java memanggil antara muka untuk mendapatkan data json dan menyimpannya ke pangkalan data

    1 Konfigurasikan URL antara muka anda sendiri dalam fail yml

        //自己定义的JSON接口URL
        blacklist_data_url: 接口URL

    2 .Tambah kaedah permintaan dan laluan dalam Pengawal

        /**
         * @Title: 查询
         * @Description: 查询车辆的记录
         * @Author: 半度纳
         * @Date: 2022/9/27 17:33
         */
        @GetMapping("/Blacklist")
        public void selectBlacklist(){
            boolean a = imBuBlacklistService.selectBlacklist();//调用业务层方法
        }

    3. Tambah kaedah

        /**
         * @Title: 查询
         * @Description: 查询车辆的记录
         * @Author: 半度纳
         * @Date: 2022/9/27 17:33
         * @return
         */
        public boolean selectBlacklist();//返回值类型没要求

    dalam Perkhidmatan 4. Laksanakan kaedah

        import cn.hutool.json.JSONArray;
        import cn.hutool.json.JSONObject;
        import com.alibaba.fastjson2.JSON;
     
     
        @Value("${blacklist_data_url}")
        public String blacklist_data_url;//接口URL
     
     
        /**
         * @Title: 查询
         * @Description: 查询车辆的记录
         * @Author: 半度纳
         * @Date: 2022/9/27 17:33
         * @return
         */
        @Override
        public boolean selectBlacklist() {
            //获取的JSON接口数据(在输出测试时sendGet方法可能会自动输出,具体需看底层代码)
            String list= HttpUtils.sendGet(blacklist_data_url);
            JSONObject j = JSON.parseObject(list);//将获取的JSON数据存储到变量中
            if(j.getBoolean("success")){//获取success判断是否为空
                JSONObject jsonData = j.getJSONObject("body");//解析JSON的body
                JSONArray jsonArray = jsonData.getJSONArray("data");//解析JSON的data数据
                JSONObject row = null;//定义一个空变量
                ImBuBlacklist buBlacklist=new ImBuBlacklist();//new一个实体类用来接收数据
                for (int y = 0; y < jsonArray.size(); ++y) {//循环将JSON数据存储到数据库中
                    buBlacklist = new ImBuBlacklist();//new一个实体类存储数据
                    row = jsonArray.getJSONObject(y);//获取数组中的数据
                       //设置获取到的JSON号牌号码到实体类的相同字段中
                    buBlacklist.setPlateNumber(row.getString("mechanicalNumber"));
                    //设置获取到的JSON车辆类型到实体类的相同字段中
                    buBlacklist.setVehicleType(row.getString("machType"));
                    //设置获取到的JSON检查日期到实体类的相同字段中
                       buBlacklist.setExamineDate(row.getDate("createDate"));
                    //设置获取到的JSON检查地点到实体类的相同字段中
                    buBlacklist.setExamineAddress(row.getString("machineAddr"));
                    //设置获取到的JSON违规行为到实体类的相同字段中
                    buBlacklist.setIllegalBehavior(row.getString("joinTheBlacklistReason"));
                    //设置获取到的JSON黑名单类型到实体类的相同字段中
                    buBlacklist.setBlacklistType(row.getInteger("violations"));
                    //通过mapper的新增方法,把实体类中的JSON数据存到数据库中
                    imBuBlacklistMapper.insertImBuBlacklist(buBlacklist);
                }
                return true;//自己定义的返回值(没有用)
            }else{
                return false;
            }
        }

    dalam ServiceImpl untuk memanggil antara muka dan menghuraikan aksara Json Serialkan dan simpan dalam pangkalan data

    Dapatkan rentetan json melalui antara muka api

    Dapatkan data antara muka melalui permintaan get(httpGet) Pada asasnya terdapat enam langkah untuk menggunakan HttpClient:

    • Buat tika HttpClient

    • Buat tika kaedah sambungan tertentu

    • Panggil laksanakan kaedah contoh HttpClient untuk melaksanakan kaedah permintaan

    • Baca respons

    • Lepaskan sambungan tanpa mengira sama ada kaedah pelaksanaan berjaya atau tidak

    //创建httpClient实例
    CloseableHttpClient client = HttpClients.createDefault();
    //汽车之家api接口
    String apiPath = "https://www.autohome.com.cn/ashx/index/GetHomeFindCar.ashx";
    //创建get方法请求实例
    HttpGet httpGet = new HttpGet(apiPath);
    //添加表头,text/xml表示XML格式
    httpGet.addHeader("content-type","text/xml");
    //调用HttpClient实例执行GET实例,返回response
    HttpResponse response = client.execute(httpGet);
    //解析response,这个过程主要取决于获取的json格式,是一个对象还是一个数组,放到后面详解
    String result = EntityUtils.toString(response.getEntity());
    //释放连接
    response.close();
    client.close();

    di mana kami boleh membalas menilai status (nyatakan) untuk mengesahkan sama ada data diperolehi Nilai status permintaan halaman adalah: 200 permintaan berjaya, 303 ubah hala. 400 ralat permintaan, 401 tidak dibenarkan, 403 akses dilarang, 404 fail tidak ditemui, 500 ralat pelayan .

    (HttpStatus.OK = 200;HttpStatus.BAD_REQUEST = 400;HttpDENStatus.40Status;HttpDEN = 40Status NOT_FOUND = 404;HttpStatus.SERVICE_UNAVAILABLE =500)

    if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
        String result = EntityUtils.toString(response.getEntity());//解析response
    }//getStatusLine()方法返回保存请求状态的StatusLine对象,getStatusCode()获取状态码

    Gunakan JSONArray dan JSONObject untuk menghuraikan rentetan json

    Sebelum menghuraikan rentetan json, kita mesti menentukan format rentetan json terlebih dahulu . Kaedah penghuraian yang berbeza harus digunakan untuk format yang berbeza Berikut ialah beberapa format String json

    Contohnya: nilai berangka, rentetan, tatasusunan, tatasusunan objek atau objek tatasusunan kurungan segi empat sama. Pastikan anda memberi perhatian kepada dua simbol ini, yang boleh menyebabkan ralat penghuraian json

    //json数值
    {
        "key" : 520,
        "key1" : 1314
    }    
    //json字符串
    {
        "key" : "我爱你",
        "key1" : "一生一世"
    }
    //json数组
    {
        "key" : [520, 1314],
        "key1" : [520, 3344]
    }
    //json对象数组
    {
        "我" : [
                      {"key": "我爱你"},
                      {"key1": "一生一世"}
        ]
    }
    //json数组对象
    {
        "我" : {
                      [520,1314],
                      ["我爱你", "一生一世"]
        }
    }

    Bagaimanakah Java memanggil antara muka untuk mendapatkan data json dan menyimpannya ke pangkalan data selepas menghuraikannya?

    Ia boleh dilihat bahawa rentetan json yang diperoleh daripada Autohome berada dalam json. format tatasusunan, jadi kita perlu menggunakan JSONArray untuk menghuraikan, dan kemudian melintasi tatasusunan json, Dapatkan setiap objek json, dan kemudian baca data daripada objek json.

    //将json字符串解析成json数组的形式
    JSONArray jsonArray = JSONArray.parseArray(result);
    //利用遍历解析json数组,并在循环中解析每一个json对象
    for (int i = 0; i < jsonArray.size(); i++) {
        //将json数组解析为每一个jsonObject对象
        JSONObject object=jsonArray.getJSONObject(i);
        //实例化一个dao层或者domain层的对象
        CarBrand Brand = new CarBrand();
        //将json对象中的数据写入实例化的对象中
        //注意object读取的字段要和json对象中的字段一样,否则无法解析
        Brand.setId(object.getInteger("id"));
        Brand.setName(object.getString("name"));
        Brand.setGroup(object.getString("letter"));
    }

    Simpan data objek yang diinstantiasi ke dalam pangkalan data

    Dalam rangka kerja springboot, mybatis-generator boleh menjana fail entiti lapisan Domain, fail xml, fail pemeta dan fail perkhidmatan yang sepadan Menggunakan pemalam ini boleh menjimatkan masa kami menulis penyata sql panggil kaedah yang sepadan dalam lapisan perkhidmatan.

    //调用service层的add方法,直接将实例化对象写入数据库
    CarBrandService.add(Brand);

    Kod lengkap Seperti berikut

    package org.linlinjava.litemall.admin.service;
     
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    import org.apache.http.HttpResponse;
    import org.apache.http.HttpStatus;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.util.EntityUtils;
    import org.linlinjava.litemall.db.dao.LitemallCarBrandMapper;
    import org.linlinjava.litemall.db.domain.LitemallCarBrand;
    import org.linlinjava.litemall.db.service.LitemallCarBrandService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
     
    import java.time.LocalDateTime;
    import java.util.List;
    import java.util.Map;
     
     
    @Service
    public class AdminCarBrandService {
     
     
     
        @Autowired
        CarBrandService carBrandService;
     
     
        public void httpRequest() {
        
            //使用httpclient获取api数据
            CloseableHttpClient client = HttpClients.createDefault();
            String apiPath = "https://www.autohome.com.cn/ashx/index/GetHomeFindCar.ashx";
            HttpGet httpGet = new HttpGet(apiPath);
            try{
                httpGet.addHeader("content-type","text/xml");
                HttpResponse response = client.execute(httpGet);
                if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                    //对获取的string数据进行json解析
                    String result = EntityUtils.toString(response.getEntity());
                    JSONArray jsonArray = JSONArray.parseArray(result);
     
                    for (int i = 0; i < jsonArray.size(); i++) {
                        //将json对象中的数据写入实例化对象中
                        CarBrand carBrand = new CarBrand();
                        JSONObject object=jsonArray.getJSONObject(i);
                        carBrand.setId(object.getInteger("id"));
                        carBrand.setName(object.getString("name"));
                        carBrand.setGroup(object.getString("letter"));
     
                        //将实例化对象存入数据库
                        carBrandService.add(CarBrand);
                    }
     
                }
            }catch (Exception e){
                throw new RuntimeException(e);
            }
     
        }
    }

    Atas ialah kandungan terperinci Bagaimanakah Java memanggil antara muka untuk mendapatkan data json dan menyimpannya ke pangkalan data selepas menghuraikannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam